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簡介