當前位置:名人名言大全網 - 端午節短信 - android如何定制常駐廣播

android如何定制常駐廣播

Android廣播機制是指當壹個應用在運行時,可以定制壹個消息類型,讓相應的接收者處理這個消息或者系統消息,比如來電、短信、系統發來的消息。系統發送的消息也可以通過廣播通知給應用程序,從而避免打開新的線程來監視系統或其他應用程序發送的消息的狀態。

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;