版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chennai1101/article/details/87362554
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 |
成功安装APK | Intent.ACTION_PACKAGE_ADDED |
成功删除APK | Intent.ACTION_PACKAGE_REMOVED |
重启设备 | Intent.ACTION_REBOOT |
屏幕被关闭 | Intent.ACTION_SCREEN_OFF |
屏幕被打开 | Intent.ACTION_SCREEN_ON |
关闭系统时 | Intent.ACTION_SHUTDOWN |
参考资料: https://www.jianshu.com/p/ca3d87a4cdf3
相关文章
Android Activity简介
Android Service简介
Android ContentProvider简介
Android BroadcastReceiver简介