BroadcastReceiver的使用,動態注冊和注銷,優先級和中斷控制


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()方法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM