常用的几个BroadcastReceiver场景案例

本文介绍了BroadcastReceiver在Android开发中的常见应用场景,包括开机启动服务、网络状态变化监测、电量变化监听、短信拦截处理、动态注册闹钟以及文件下载监控。通过实例代码展示了如何实现这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、开机启动服务

import android.content.BroadcastReceiver;  
import android.content.Context;  
import android.content.Intent;  
import android.util.Log;  
  
public class BootCompleteReceiver extends BroadcastReceiver {  
      
    private static final String TAG = "BootCompleteReceiver";  
      
    @Override  
    public void onReceive(Context context, Intent intent) {  
        Intent service = new Intent(context, PushService.class);  
        context.startService(service);  
        Log.i(TAG, "Boot Complete. Starting PushService...");  
    }  
  
}  

        在xml文件中的注释说明为:

<!-- 开机广播接受者 -->  
<receiver android:name=".BootCompleteReceiver">  
    <intent-filter>  
        <!-- 注册开机广播地址-->  
        <action android:name="android.intent.action.BOOT_COMPLETED"/>  
        <category android:name="android.intent.category.DEFAULT" />  
    </intent-filter>  
</receiver>

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

2、网络状态变化

        直接来一段JAVA的代码如下:

private static final String TAG = "NetworkStateReceiver";  
      
    @Override  
    public void onReceive(Context context, Intent intent) {  
        Log.i(TAG, "network state changed.");  
        if (!isNetworkAvailable(context)) {  
            Toast.makeText(context, "network disconnected!", 0).show();  
        }  
    }


<receiver android:name=".NetworkStateReceiver">  
    <intent-filter>  
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>  
        <category android:name="android.intent.category.DEFAULT" />  
    </intent-filter>  
</receiver>

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>


3、电量变化


public class BatteryChangedReceiver extends BroadcastReceiver {  
  
    private static final String TAG = "BatteryChangedReceiver";  
      
    @Override  
    public void onReceive(Context context, Intent intent) {  
        int currLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);  //当前电量  
        int total = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 1);      //总电量  
        int percent = currLevel * 100 / total;  
        Log.i(TAG, "battery: " + percent + "%");  
    }  
  
}

<receiver android:name=".BatteryChangedReceiver">  
    <intent-filter>  
        <action android:name="android.intent.action.BATTERY_CHANGED"/>  
        <category android:name="android.intent.category.DEFAULT" />  
    </intent-filter>  
</receiver> 

4、短信拦截

<span style="white-space:pre">	</span>@Override
	public void onReceive(Context context, Intent intent) {
		Object[] pdus = (Object[]) intent.getExtras().get("pdus");
		for (Object obj : pdus) {
			byte[] pdu = (byte[]) obj;// 将对象转换为字节数组
			SmsMessage message = SmsMessage.createFromPdu(pdu);// 使用pdu格式的数据生成短信对象
			String content = message.getMessageBody();
			Date date = new Date(message.getTimestampMillis());// 获取发送时间
			SimpleDateFormat format = new SimpleDateFormat(
					"yyyy-MM-dd HH:mm:ss");
			String receiveTime = format.format(date);// 获取指定格式发送日期
			String senderNumber = message.getOriginatingAddress();// 发送者的号码


			Logger.ii(receiveTime, senderNumber);


			if (phone.equals(senderNumber)) {
				abortBroadcast();
			}
		}

	}

<span style="white-space:pre">	</span><!-- 短信拦截器 -->
        <receiver android:name="com.paying.player.sms.SMSBroadcastReceiver" >
            <!-- 意图过滤器 -->
            <intent-filter android:priority="1000" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

5、闹钟动态注册

Intent intent = new Intent("MYALARMRECEIVER");
mAlarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
mPendingIntent = PendingIntent.getService(this, 0, intent,
		Intent.FLAG_ACTIVITY_NEW_TASK);


long now = System.currentTimeMillis();
// 一分钟后重启一次
mAlarmManager.setInexactRepeating(AlarmManager.RTC, now, 60000,mPendingIntent);


<!-- 闹钟提醒 -->
<receiver android:name="com.common.offerads.service.DateChangeService" >
    <intent-filter>
        <action android:name="MYALARMRECEIVER" />
    </intent-filter>
</receiver>


6、文件下载


	@SuppressLint("NewApi")
	public void onReceive(Context context, Intent intent) {
		this.mContext = context;
		
		myDwonloadID = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID,
				-1);
		// 通过共享文件,找到下载后存放的地址
		sPreferences = context.getSharedPreferences("downloadcomplete", 0);
		long refernece = sPreferences.getLong(myDwonloadID + "refernece", 0);


		// 如果当前下载的地址就是我存放的地址
		if (refernece == myDwonloadID) {
			// 获取图片,然后显示通知栏
			new GetIconThread().start();
		}
	}


<receiver android:name="com.common.offerads.receiver.UpdataBroadcastReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
    </intent-filter>
</receiver>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值