天天看點

Android - Broadcast

廣播接收器(Broadcast Receiver)

标準廣播(Normal Broadcasts)完全異步的廣播。廣播發出後,所有的廣播接收器幾乎同時接收到這條廣播

有序廣播(Ordered Broadcasts)同步廣播。同一時刻隻有一個廣播接收器能接收到這條廣播。這個接收器處理完後,廣播才會繼續傳遞。

注冊廣播。在代碼中注冊稱為動态注冊。在AndroidManifest.xml中注冊稱為靜态注冊。動态注冊的剛波接收器一定要取消注冊。在onDestroy()方法中調用unregisterReceiver()方法來取消注冊。

建立廣播接收器:調用onReceive()方法,需要一個繼承BroadcastReceiver()的類。

不要在onReceive()方法中添加過多的邏輯操作或耗時的操作。因為在廣播接收器中不允許開啟線程,當onReceive()方法運作較長時間而沒結束時,程式會報錯。是以廣播接收器一般用來打開其他元件,比如建立一條狀态欄通知或啟動一個服務。

标準廣播

建立一個MyExampleReceiver繼承自BroadcastReceiver。

public class MyExampleReceiver extends BroadcastReceiver{

@Override

public void onReceive(Context context, Intent intent){

Toast.makeText(context,"Got it",Toast.LENGTH_SHORT).show();

//abortBroadcast();

}

}

abortBroadcast();可以截斷有序廣播

在AndroidManifest.xml中注冊廣播接收器;name裡填接收器的名字。

可以設定廣播接收器優先級:<intent-filter android:priority="100">

<receiver android:name=".MyExampleReceiver">

<intent-filter>

<action android:name="com.rust.broadcasttest.MY_BROADCAST"/>

</intent-filter>

</receiver>

讓接收器接收到一條“com.rust.broadcasttest.MY_BROADCAST”廣播。

發送自定義廣播(标準廣播)時,要傳送這個值。例如:

Intent intent = new Intent("com.rust.broadcasttest.MY_BROADCAST");

sendBroadcast(intent);

發送有序廣播,應當調用sendOrderedBroadcast();

Intent intent = new Intent("com.rust.broadcasttest.MY_BROADCAST");

sendOrderedBroadcast(intent,null);

本地廣播

廣播隻能在應用程式内部進行傳遞,并且廣播接收器也隻能接收到來自本應用程式發出的廣播。

本地廣播無法靜态注冊。比全局廣播更加高效。

用LocalBroadcastManager管理廣播。将其執行個體化getInstance(),調用發送廣播和注冊廣播接收器的方法。

--> sendBroadcast();--> registerReceiver();

在配置檔案中聲明權限,程式才能通路一些關鍵資訊。

例如允許查詢系統網絡狀态。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

機器開機廣播

<uses-permission android:name="android.permission.BOOT_COMPLETED">

允許一個程式打開視窗使用 TYPE_SYSTEM_ALERT,顯示在其他所有程式的頂層

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

如果沒有申請這些權限,程式有可能會意外關閉。并彈出對話框。

上一篇: Java - override
下一篇: Java - extends

繼續閱讀