標準廣播,有序廣播,本地廣播和自定義廣播

2021-07-23 22:58:11 字數 1987 閱讀 9453

標準廣播:

廣播發出後所有的廣播接收器幾乎均可同時接收,沒有順序並且無法被截斷

動態註冊:

intentfilter intentfilter=new intentfilter();

intentfilter.addaction("action");

registerreceiver(繼承broadcastreceiver的廣播***,intentfilter);

取消註冊:

unregisterreceiver(繼承broadcastreceiver的廣播***);

靜態註冊:

傳送標準廣播:

intent intent=new intent("action");

sendbroadcast(intent);

有序廣播:

廣播傳送後同一時間只有乙個廣播接收器能收到,第乙個接收器處理完之後才能繼續被下乙個接收器接收到,每乙個接收器都可以將這段廣播截斷不再繼續流傳

跟標準關閉比起來,區別只有一點,只需要修改傳送廣播的方法即可

sendorderedbroadcast(intent,null);
第二個引數是指定接收者必須擁有的接收許可權,如果設為null,就是不需要接收許可權,所有匹配的receiver都能接收到

同時有序廣播可以設定優先順序,優先順序越高的越早能接收到廣播

如果是靜態註冊則在intent-filter中加入引數

android

:priority=

"10"

動態註冊則設定

intentfilter.setpriority(100);

值為整數,數字越大優先順序越高

如果在廣播接收器中呼叫了

abortbroadcast();
方法,則這個廣播被截斷不會再被其他接收器接收到

本地廣播:

標準廣播和有序廣播都是可以在整個手機中被接收到的,如果想要廣播只在應用內傳遞則可以使用本地廣播

本地廣播與標準廣播的區別也不大,修改傳送和註冊的方法即可

傳送:

localbroadcastmanager.getinstance(this).sendbroadcast(intent);

註冊:

localbroadcastmanager.getinstance(this).registerreceiver(繼承broadcastreceiver的廣播***, intentfilter);

取消註冊:

localbroadcastmanager.getinstance(this).unregisterreceiver(繼承broadcastreceiver的廣播***);

自定義廣播:

以上三種廣播中的action修改為自定義字串就可以算作是自定義廣播了。。。

使用系統廣播的時候注意許可權,廣播接收器都得註冊,接收器接收的action與傳送的action一致才能被接收器接收到

在廣播接收器中彈出dialog的時候必須將對話方塊型別設定為:

.getwindow().settype(windowmanager.layoutparams.type_system_alert

);

也就是系統dialog,不然會崩

在接收器中開啟activity也必須設定flags為

intent.addflags(intent.flag_activity_new_task

);

Android本地廣播機制

引入本地廣播機制的為了解決安全性的問題,優點 1.正在傳送的廣播不會離開我們的程式,不用擔心機密的資料洩露的問題 2.其他的程式無法將廣播傳送到我們的程式的內部,因此不用擔心安全漏洞的問題 3.傳送本地廣播比傳送全域性廣播高效。使用localbroadcastmanager的getinstance ...

有序廣播和無序廣播

有序廣播可以指定廣播接收者的順序,無序廣播是大家一起接收匹配到的進行操作就行。有序廣播可以中斷,sendorderedbroadcast 無序廣播不可以中斷 sendbroadcast intent 用 示例說明 param view 傳送無序廣播的按鈕的功能 public void sendbro...

Android自定義傳送本地廣播

以前傳送和接收廣播 有序,無序 都屬於系統全域性廣播,傳送的廣播其他任何程式都能接收到。android中本地廣播機制,只能在程式內部進行傳遞。傳送本地廣播 private localbroadcastmanager localbroadcastmanager localbroadcastmanage...