建立一個廣播接收器的步驟:android
1.建立一個類 extends BroadCastReceiver,重寫onReceive()方法安全
2.註冊廣播網絡
3.發送廣播線程
context.sendBroadcast(new Intent("action")); // 廣播的頻道生命週期
註冊廣播的兩種方式:get
1.全局廣播:it
註冊在清單配置文件,關閉應用後仍在監聽io
<receiver android:name="全路徑">ast
<intent-filter>test
<action android:name="xxx"/> // 能夠爲全路徑的小寫
</intent-filter>
</receiver>
2.動態註冊
MainActivity ——> onCreate() {
IntentFilter filter = new IntentFilter();
filter.addAction(MY_ACTION);
receiver = new MyBroadCast();
registerReceiver(receiver, filter);
}
onDestroy(){ unregisterReceiver(receiver); }
系統廣播:
Intent.ACTION_BATTERY_LOW 低電量提醒廣播
Intent.ACTION_BATTERY_CHANGED
Intent.ACTION_BOOT_COMPLETED 開機完成
Intent.ACTION_SHUTDOWN 關機提醒
Intent.ACTION_SCREEN_OFF 屏幕關閉
Intent.ACTION_SCREEN_ON
Intent.ACTION_USER_PRESENT 屏幕解鎖
Intent.ACTION_NEW_OUTGOING_CALL 撥號廣播
TelephoneManager.ACTION_PHONE_STATE_CHANGED 來電時電話狀態改變(如響鈴、空置、掛斷)
Telephone.Sms.Intent_SMS_RECEIVED_ACTION 接收短信
ConnectivityManager.CONNECTIVITY_ACTION 網絡狀態改變
example:
ConnectivityManager.CONNECTIVITY_ACTION 網絡狀態改變
onReceive(Context context, Intent intent) {
ConnectivityManager manager = (ConnectivityManager)context.getSystenService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
if(networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnectedOrConnecting()) {
String name = networkInfo.getTypeName();
}else {
context.Toast.makeText(context, "沒有網絡",Toast.LENTH_LONG).show();
}
}
廣播的生命週期短暫:接收到廣播時建立,onReceive()方法結束時銷燬,不要在廣播接收者中作一些耗時或建立子線程耗時操做,應在服務Service中完成
有序廣播(action同樣)
context.sendOrderedBroadcast(intent, 權限str);
1.按照註冊順序
2.按大小 <intent-filter android:property="100"> // 1000最高,-1000最低
3.中斷低的廣播接收器接收廣播
onReceiver() {
...
abortBroadcast();
}
廣播的安全性:
發送端:
1.指定接收廣播的應用包名:
intent.putPackage("com.fgl.test");
2.發送帶權限的廣播:
定義權限:<permisson android:name = "com.fgl.testsafetypermission"/>
<use-permission android:name = "com.fgl.testsafetypermission"/>
sendBroadcast(intent, "com.fgl.testsafetypermission");
接收端:不接收外部應用的廣播 <receiver ... android:exported="false">