Android廣播的分類:
1.普通廣播:這種廣播可以依次傳送到各個處理器進行處理。
2.有序廣播(Ordered broadcast ):處理器端對此廣播的處理順序根據處理器優先級的不同而有所區別。具有高優先級的處理器將首先截取該消息,並且可以刪除該消息。
3.粘性消息:粘性消息在發送後壹直存在於系統的消息容器中,等待相應的處理器進行處理。如果暫時沒有處理器來處理這個消息,它總是在消息容器中等待。
註意:普通廣播不同於粘性消息,但有序廣播可以被攔截。
處理器註冊:
1.用函數代碼在代碼中動態註冊。動態註冊的處理器必須由代碼動態銷毀,壹次只能使用壹個實例對象來處理消息。
2、靜態註冊在配置文件中,靜態註冊有壹個特點,就是壹旦註冊,無論應用程序是關閉還是開啟,它都會壹直存在於系統中。這只是壹個流氓軟件病毒。每次在靜態註冊中處理壹個消息時,它都被系統的處理器處理新的和銷毀的。
我們來具體看壹下Android廣播消息的發送、註冊和處理流程:
①定制處理器類別:
公共類MyBroadcastReceiver4擴展BroadcastReceiver {
公共MyBroadcastReceiver4() {
system . out . println(" register receiver()註冊的廣播接收器已創建");
}
@覆蓋
公共void onReceive(上下文語境,意圖意圖){
string action = intent . get action();
系統。out . println(" MyBroadcastReceiver 4收到壹條"+action+"消息");
if (isOrderedBroadcast()) {
System.out.println("此為有序廣播,已被攔截。");
this . abort broadcast();
}否則{
System.out.println("這不是有序廣播");
}
bundle bundle = intent . get extras();
如果(捆綁!= null) {
System.out.println("該消息攜帶的數據如下:");
//獲取bundle的壹組密鑰。
set set = bundle . keyset();
//獲取上面集合的叠代器。
iterator iterator = set . iterator();
//用叠代器遍歷集合
while (iterator.hasNext()) {
//獲取集合中的內容
String str =(String)iterator . next();
//獲取包中的內容
system . out . println(str+"-& gt;"+bundle . get(str));
}
}否則{
System.out.println("此消息不攜帶數據");
}
Toasttoast =烤面包。maketext(上下文,“MyBroadcastReceiver 4收到壹個”。
+動作+“消息”,敬酒。長度_ LONG);
toast . show();
//攔截這個消息(從消息容器中移除),讓其他處理器接收不到。
this . abort broadcast();
}
}
②發送廣播消息。
(1)、發送普通廣播:
//發送普通消息
Intent Intent = new Intent();intent . set action(" asdfasdf ");
Android _ 09 _ 10 activity . this . send broadcast(意圖);
(2)發送有序廣播:
//發送有序消息
Intent Intent = new Intent();
intent . set action(" asdfasdf ");Android _ 09 _ 10 activity . this . sendorderedbroadcast(intent,
null);
(3)、發送粘性廣播:
//發送粘性消息
Intent Intent = new Intent();
intent . set action(" qwerqwer ");Android _ 09 _ 10 activity . this . sendstickybroadcast(intent);
③註冊廣播接收器。
(1)動態註冊:
//註冊廣播接收器。
intent filter intent filter = new intent filter(" asdfasdf ");
intent filter . set priority(0);
Android _ 09 _ 10 activity . this . register receiver(MBR 2,
intent filter);
(2)靜態註冊:
& ltreceiver Android:name = " . mybroadcastreceiver 4 " & gt;
& lt意圖過濾Android:priority = " 1000 " & gt;
& ltaction Android:name = " Android . intent . action . wallpaper _ CHANGED "/& gt;
& ltaction Android:name = " Android . provider . telephony . SMS _ RECEIVED "/& gt;
& ltaction Android:name = " Android . intent . action . phone _ STATE "/& gt;
& ltaction Android:name = " Android . intent . action . package _ REMOVED "/& gt;
//這句話比較特殊,是上面廣播消息特有的。
& ltdata Android:scheme = " package "/& gt;
& lt類別Android:name = " Android . intent . category . default "/& gt;
& lt/intent-filter & gt;
& lt/receiver & gt;
當您想要發送粘性消息時,您必須在配置文件中獲得權限:
& ltuses-permission Android:name = " Android . permission . broadcast _ STICKY "/& gt;
如果要使用自定義處理器來處理系統廣播,還必須在註冊文件中聲明訪問權限,例如:
& ltuses-permission Android:name = " Android . permission . receive _ SMS "/& gt;
& ltuses-permission Android:name = " Android . permission . read _ PHONE _ STATE "/& gt;