Android BroadcastReceiver简介

1. BroadcastReceiver类

BroadcastReceiver用来接收广播,并在onReceive(Context, Intent)方法里面处理广播。

public class DemoBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
    }

}

2. 注册广播

  • 静态注册,需要在AndroidMainFest.xml文件中添加receiver标签。
    <receiver android:name=".component.receiver.DemoBroadcastReceiver">
        <intent-filter>
            <action android:name="com.blog.demo.action.receiver" />
        </intent-filter>
    </receiver>
    
  • 动态注册,需要在Activity中调用registerReceiver(BroadcastReceiver, IntentFilter)方法
    IntentFilter intentFilter = new IntentFilter("com.blog.demo.action.receiver");
    registerReceiver(mReceiver, intentFilter);
    

3. 发送广播

通过sendBroadcast(Intent)发送广播

Intent intent = new Intent("com.blog.demo.action.receiver");
intent.putExtra("value", "broadcast");
sendBroadcast(intent);

通过sendOrderedBroadcast(Intent, String)发送有序广播

Intent intent = new Intent("com.blog.demo.action.receiver");
intent.putExtra("value", "broadcast");
sendOrderedBroadcast(intent, null);

注意点

  • 发送出去的广播被广播接收者按照先后顺序接收
  • 广播接受者按照Priority属性值从大到小排序,Priority属性值相同时,动态注册先于静态注册
  • 先接收的广播接收者可以对广播进行截断,即后接收的广播接收者不再接收到此广播,调用abortBroadcast()方法
  • 先接收的广播接收者可以对广播进行修改,那么后接收的广播接收者将接收到被修改后的广播

Priority属性值的范围是-1000~1000,静态注册的可以在AndroidMainFest.xml文件中配置

<receiver android:name=".component.receiver.DemoBroadcastReceiver">
    <intent-filter android:priority="1000">
        <action android:name="com.blog.demo.action.receiver" />
    </intent-filter>
</receiver>

动态注册则通过setPriority(int)修改

IntentFilter intentFilter = new IntentFilter("com.blog.demo.action.receiver");
intentFilter.setPriority(500);
registerReceiver(mReceiver, intentFilter);

4. 本地广播

Android中的广播可以跨App直接通信,存在有数据安全的问题。使用本地广播,只能在本地应用程序中发送与接收广播,可以起到保护数据安全的作用。

  • 可以在注册广播时将exported属性设置为false,在广播发送和接收时,增设相应权限permission,用于权限验证。
  • 也可以使用LocalBroadcastManager
    LocalBroadcastManager mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
    
    // 注册
    IntentFilter intentFilter = new IntentFilter("com.blog.demo.action.receiver");
    intentFilter.setPriority(500);
    mLocalBroadcastManager.registerReceiver(mReceiver, intentFilter);
    
    // 注销
    mLocalBroadcastManager.unregisterReceiver(mReceiver);
    

5. 常用系统广播

系统操作action
监听网络变化android.net.conn.CONNECTIVITY_CHANGE
关闭或打开飞行模式Intent.ACTION_AIRPLANE_MODE_CHANGED
充电时或电量发生变化Intent.ACTION_BATTERY_CHANGED
电池电量低Intent.ACTION_BATTERY_LOW
电池电量充足(即从电量低变化到饱满时会发出广播)Intent.ACTION_BATTERY_OKAY
系统启动完成后(仅广播一次)Intent.ACTION_BOOT_COMPLETED
按下照相时的拍照按键(硬件按键)时Intent.ACTION_CAMERA_BUTTON
屏幕锁屏Intent.ACTION_CLOSE_SYSTEM_DIALOGS
设备当前设置被改变时(界面语言、设备方向等)Intent.ACTION_CONFIGURATION_CHANGED
插入耳机时Intent.ACTION_HEADSET_PLUG
未正确移除SD卡但已取出来时(正确移除方法:设置–SD卡和设备内存–卸载SD卡)Intent.ACTION_MEDIA_BAD_REMOVAL
插入外部储存装置(如SD卡)Intent.ACTION_MEDIA_CHECKING
成功安装APKIntent.ACTION_PACKAGE_ADDED
成功删除APKIntent.ACTION_PACKAGE_REMOVED
重启设备Intent.ACTION_REBOOT
屏幕被关闭Intent.ACTION_SCREEN_OFF
屏幕被打开Intent.ACTION_SCREEN_ON
关闭系统时Intent.ACTION_SHUTDOWN

参考资料: https://www.jianshu.com/p/ca3d87a4cdf3

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值