Android廣播的詳解

2021-10-03 11:34:58 字數 3138 閱讀 7632

為什麼說 android 中的廣播機制更加靈活呢?這是因為 android 中的每個應用程式都可以對自己感興趣的廣播進行註冊,這樣該程式就只會接受自己所關心的廣播內容,這些廣播內容可能是來自於系統,也可能是來自於其他應用程式的。android 提供了一整套的 api,允許應用程式自由地傳送和接受廣播。

廣播分為兩大類:

1.接受系統廣播

android 內建了很多系統級別的廣播,我們可以在應用中通過監聽這些廣播來得到各種系統的狀態資訊。比如手機開機後會傳送一條廣播,電池的電量發生變化會發出一條廣播,時間或時區發生改變也會發出一條廣播等等。如果想要接受這些廣播,就需要使用廣播接收器。

1.1註冊廣播方式一般有兩種:

1.1.1 動態註冊監聽網路變化

**如下:

許可權

private  networkchangereceiver networkchangereceiver;

private intentfilter intentfilter;

private void init()

private class networkchangereceiver extends broadcastreceiver else }}

@override

protected void ondestroy()

1.1.2 靜態註冊廣播實現開機啟動:

動態註冊的廣播接收器可以自由地控制註冊與登出,在靈活性方面有很大的優勢,但是它也存在著乙個缺點,即必須要在程式啟動之後才能接受到廣播,因為註冊的邏輯是寫在 oncreate()方法中的。那麼有沒有什麼方法可以讓程式在未啟動的情況下就能接受到廣播呢?這就需要使用靜態註冊方式了。

我們將廣播接受器命名為 myreceiver;

我們使用 android的快捷方式建立廣播接收器,因此註冊被自動完成了,開啟 androidmanifest.xml檔案看一下:

許可權必須手動配置:開機廣播

注意:不要在 onreceive()方法中新增過多的邏輯或者進行任何的耗時操作,因為在廣播接收器中是不允許開啟執行緒的,當onreceive()方法執行了較長時間而沒有結束時,程式就會報錯。因此廣播接收器更多的是扮演一種開啟程式其它元件的角色,比如建立一條狀態列通知,或者啟動乙個服務等。

/**

* 廣播接受器

*/public class myreceiver extends broadcastreceiver

}

2.1傳送自定義廣播

2.1.1 傳送標準廣播

**如下:

註冊廣播

重寫廣播方法:

public class mybroadcastreceiver extends broadcastreceiver 

}

呼叫廣播方法:

intent intent = new intent("com.function.luo.mybroadcastreceiver");

sendbroadcast(intent);

2.1.2 傳送有序廣播

廣播是一種跨程序的通訊方式,這一點從前面接受系統廣播的時候就可以看出來了。因此在我們應用程式內發出的廣播,其它應用程式也是可以接受的。

//傳送有序廣播

intent intent = new intent("com.function.luo.mybroadcastreceiver");

sendorderedbroadcast(intent,null);

第乙個引數是 intent;

第二個引數是乙個與許可權相關的字串,這裡傳 null 就行了

android:priority="100" 設定優先順序,優先順序較高的廣播接收器就可以先收到廣播。

public class mybroadcastreceiver extends broadcastreceiver 

}

在onreceive()方法中呼叫了 abortbroadcast()方法,就表示這條廣播截斷,後面的廣播接收器無法再接受到這條廣播。

3.1 使用本地廣播

簡介:

前面我們傳送和接受的廣播全部屬於系統全域性廣播,即發出的廣播可以被其它任何應用程式接收到,並且我們也可以接受來自於其它任何應用程式的廣播。

為了解決廣播安全性問題,android 引入了一套本地廣播機制,使用這個機制發出的廣播只能在應用程式內部進行傳遞,並且廣播接受器也只能接受來自本應用程式發出的廣播,這樣所有的安全性問題就都不存在了。

初始化廣播:

private localbroadcastmanager localbroadcastmanager;

private void init()

傳送本地廣播

intent intent = new intent("om.function.luo.local_broadcast");

localbroadcastmanager.sendbroadcast(intent);

重寫廣播接受方法

private class localreceiver extends broadcastreceiver 

}

注意:

本地廣播是無法通過靜態註冊的方式來接收的,其實這也完全可以理解,因為靜態註冊主要是為了讓程式在未啟動的情況下也能接受到廣播,而傳送本地廣播時,我們的程式已經啟動了,因此也完全不需要使用靜態註冊的功能。

本地廣播的優勢

廣播常用的地方:

類似 qq強制下線功能,出現乙個彈窗,殺死所有 activity,強制進入登入頁面(可以選用,靜態廣播,動態廣播或者本地廣播)。

Android中的廣播

android中的廣播。有發射廣播,必須要有收音機才能接到,並且調對臺才能得到對應的臺。1.電台發射廣播 使用intent,intent intent new intent 需要廣播的臺的名字 context。sendbroadcast intent 也就是先 生成一下你需要廣播的臺,然後用send...

android中的廣播

接收廣播如下 public class mybroadcastreceiver extends broadcastreceiver 傳送廣播 intent intent new intent intent.setaction com.itcast.broadcastreceivertest inte...

android 廣播的方法

依賴包類 傳送廣播,實現例項如下 if nitscan 1 chnum 0 else break default broadcast cmd broadcast param break intent.putextra dvb channel search broadcast extr cmd,bro...