BroadcastReceiver:
BroadcastReceiver(廣播接收器)是Android中的四大組件之一,用來通知某些事件的相關信息,如下載完成,設置改變等。
默認的BroadcastReceiver狀態(新建完未更改任何設置)的簡單使用方法:
1.通過new Intnet(MainActivity.this,MyReceiver.class)來啟動指明的廣播對象,(當manifests中注冊了此BroadcastReceiver才能通過這種方法啟動)
2.Intent可以通過intent.putExtra()方法攜帶一些信息,將這些信息傳遞給Broadcast
啟動代碼:
Intent i = new Intent(MainActivity.this,MyReceiver.class); i.putExtra("data","testing"); sendBroadcast(i);
動態注冊和注銷:
在新建BroadcastReceiver時,IDE默認在manifests文件中給BroadcastReceiver注冊,當manifests文件中刪除了它的注冊信息的時候,可以在BroadcastReceiver中添加public static final action = "包名.Intent.action.actionName"),然后通過new Intent(BroadcastReceiverName.action)來啟動未注冊的BroadcastReceiver)。
注冊方法:
//在BroadcastReceiver中需要添加,用於啟動BroadcastReceiver
public static final String action = "程序包名.intent.action.MyReceiver";
//此注冊方法的代碼在Activity中
private MyReceiver receiver = null; if (receiver==null){ receiver = new MyReceiver(); registerReceiver(receiver,new IntentFilter(MyReceiver.action)); }
注銷方法:
if (receiver!=null){ unregisterReceiver(receiver); receiver = null; }
同時向多個BroadcastReceiver發送信息的方法:
1.在manifests文件中為需要同時發送的BroadcastReceiver注冊相同的啟動action
2.通過Intent啟動多個BroadcastReceiver相同的action,並向其發送信息,即能是所有相同action的BroadcastReceiver收到信息
manifests模塊的注冊代碼:
<receiver android:name=".MyReceiver1" android:enabled="true" android:exported="true"> <intent-filter>
//設置的action <action android:name="程序包名.intent.action.MyReceiver"/> </intent-filter> </receiver>
<receiver android:name=".MyReceiver"> <intent-filter>
//設置的action <action android:name="程序包名.intent.action.MyReceiver"/>
</intent-filter>
</receiver>
//啟動代碼同注冊時
BroadcastReceiver的優先級和中斷操作:
BroadcastReceiver在未設置優先級的時候,同時發送信息的話,先在manifests文件中注冊的BroadcastReceiver先收到信息,若是設置了優先級信息,那么優先級數值越大,優先級越高,優先級越高就先執行。
注:優先級在manifests文件中設置
在manifests文件中設置優先級的代碼:
<receiver android:name=".MyReceiver1" android:enabled="true" android:exported="true"> <intent-filter android:priority="9"> //設置MyReceiver1的優先級為9 <action android:name="andrew.com.broadcastreceiverdemo.intent.action.MyReceiver"/> </intent-filter>
</receiver>
<receiver android:name=".MyReceiver">
<intent-filter android:priority="10"> //設置MyReceiver的優先級為10 <action android:name="andrew.com.broadcastreceiverdemo.intent.action.MyReceiver"/> </intent-filter>
</receiver>
//在設置對應的優先級后,MyReceiver會先接收到信息
BroadcastReceiver的中斷操作:
在BroadcastReceiver存在接收優先級的時候,先接收到信息的BroadcastReceiver可以選擇中斷此廣播,讓優先級低於自己的BroadcastReceiver無法再接收到此次廣播。
中斷廣播繼續傳遞的代碼:
@Override public void onReceive(Context context, Intent intent) { abortBroadcast(); //在這里中斷此次廣播 }
注:
若是有中斷廣播的操作,那么啟動廣播傳遞的方式不能是sendBroadcast()方法,使用sendBroadcast()發送的廣播在接收時被中斷,程序會出現錯誤。
要使中斷廣播的操作正常運行,需要使用sendOrderedBroadcast()方法。