BroadcastReceiver的靜態註冊和動態註冊
註冊廣播的方式
1.動態註冊(在*.java代碼中註冊)
2.靜態註冊(在AndroidManifest.xml中註冊receiver)
例:動態註冊,監聽網絡變化
MainActivity.java
1. 聲明兩個數據成員
private IntentFilter intentFilter;
private NetworkChangeReceiver networkChangeReceiver;
2.在onCreate方法裏註冊廣播
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); //要監聽的廣播(網絡變化)
networkChangeReceiver = new NetworkChangeReceiver();
registerReceiver(networkChangeReceiver, intentFilter); //註冊
3.重寫MainActivity的onDestory方法,取消註冊
@Override
protected void onDestroy() {
super.onDestroy();
localBroadcastManager.unregisterReceiver(networkChangeReceiver); //取消註冊
}
4.創建一個內部類NetworkChangeReceiver繼承廣播接收器BroadcastReceiver
class NetworkChangeReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectionManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();
if(networkInfo!=null && networkInfo.isAvailable()){
Toast.makeText(context, "network is available", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "network is unavailable", Toast.LENGTH_SHORT).show();
}
}
}
5.在AndroidManifest.xml內加入查看系統網絡狀態的權限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
6.運行程序,在打開或關閉網絡時就會有相應提示,即使按下Home鍵,打開其他應用也能檢測到網絡狀態變化併發送廣播(但如果按返回鍵則不行,返回會自動調用onDestroy方法取消註冊的廣播。)
例:靜態註冊,實現開機啓動
1.新建類繼承BroadcastReceiver,重寫onReceive方法
public class BootCompleteReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Boot Complete", Toast.LENGTH_LONG).show);
}
}
2.在AndroidManifest中聲明開機啓動權限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
3.在AndroidManifest中靜態註冊廣播接收器
<receiver android:name=".BootCompleteReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
4.把程序安裝在手機上,重啓手機後,就會看到發出的廣播”Boot Complete”