標準廣播:
廣播發出後所有的廣播接收器幾乎均可同時接收,沒有順序並且無法被截斷
動態註冊:
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...