日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android中BroadcastReceiver

發(fā)布時(shí)間:2024/9/27 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android中BroadcastReceiver 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、? BroadcastReceiver(廣播接受者)

該組件接受被廣播的intent,Context可以通過(guò)sendBroadcast()sendOrderedBroadcast()方法實(shí)現(xiàn)廣播。

public class IncomingSMSReceiver extends BroadcastReceiver{

???????? public void onReceiver(Context context,Intent intent){

?

}

}

注冊(cè)接收者

編程式((意圖action name))

Filter = new IntentFilter(“android.provider.Telephony.SMS_RECEIVED”);

IncomingSMSReceiver receiver = new IcomingSMSReceiver();

registerReceiver(receiver,filter);

聲明式

???????? <receiver android:name=”.IncomingSMSReceiver”

//要發(fā)送者具有該權(quán)限

Android:permission=”cn.android.permission.customer”

>?

?????????????????? <intent-filter>

??????????????????????????? <action android:name=”android.provider.Telephony.SMS_RECEIVED”></action>

</intent-filter>

</receiver>

?

ctx.sendBroadcast(intent,”接受者必須具有的權(quán)限串”);

?

手機(jī)收到短信后,android系統(tǒng)會(huì)廣播一個(gè)意圖(收到短信意圖),由接受者收到。

public class IncomingSMSReceiver extends BroadcastReceiver{

???????? //android.provider.Telephony.Sms.Intents.SMS_RECEIVED_ACTION

???????? String SMS_RECEIVED=”android.provider.Telephony.SMS_RECEIVED”;?? //action名稱(chēng)

???????? public void onReceive(Context context,Intent intent){

?????????????????? if(intent.getAction().equals(SMS_RECEIVED)){

?????????????????? SmsManager sms = SmsManager.getDefault();

?????????????????? Bundle bundle = intent.getExtras();

?????????????????? Object[] pdus = (Object[])bundle.get(“pdus”);

?????????????????? SmsMessage[] messages = new SmsMessage[pdus.length];

?????????????????? for(int i=0;i<pdus.length;i++){

??????????????????????????? messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);

??????????????????????????? for(SmsMessage message : messages){

???????????????????????????????????? String msg = message.getMessageBody();

???????????????????????????????????? sms.sendTextMessage(to,null,msg,null,null);

}

}

}

}

}

<uses-permission android:name=”android.permission.RECEIVE_SMS”/>

<uses-permission android:name=”android.permission.SEND_SMS”/>

注:android.provider.Telephony.Sms.Intents.getMessageFromIntent(null);

?

廣播類(lèi)型

?

普通廣播(Normal broadcasts

異步的,同時(shí)被很多接受者一同接收到,不能將處理傳給下一個(gè)接收者,無(wú)法終止廣播。

?

有序廣播(Ordered broadcasts

按照接收者的優(yōu)先級(jí)順序接收廣播,優(yōu)先級(jí)別再intent-filter中的priority中聲明,-10001000之間,值越大,優(yōu)先級(jí)越高,可以終止廣播意圖的繼續(xù)傳播,接收者可以篡改內(nèi)容。

<intent-filter android:priority=”1”>

???????? <action android:name=”com.android.frameworks..BROADCST_ABORT”/>

context.sendBroadCast(intent);

//指定權(quán)限串發(fā)送廣播

context.sendBroadCast(intent,permissionStr);

context.sendOrderedBroadCast();

receiver.setResultExtra(bundle);

receiver.getResultExtra(true);

?

?

廣播接收者的響應(yīng)

每次廣播到來(lái)時(shí),會(huì)重新創(chuàng)建receiver對(duì)象,并且調(diào)用onReceive()方法,執(zhí)行完成之后,該對(duì)象即被銷(xiāo)毀。當(dāng)onReceive()方法在10秒內(nèi)沒(méi)有執(zhí)行完畢,Android會(huì)認(rèn)為該程序無(wú)響應(yīng),所以在BroadcastReceiver里不能做一些比較耗時(shí)的操作,否則會(huì)彈出ANR(Application No Response)的對(duì)話(huà)框。

?

如果需要完成一項(xiàng)比較耗時(shí)的工作,應(yīng)該通過(guò)發(fā)送IntentService,由Service來(lái)完成,這里不能使用子線(xiàn)程來(lái)解決,因?yàn)?span style="font-family:Calibri">BroadcastReceiver的生命周期很短,子線(xiàn)程可能還沒(méi)有結(jié)束。

BroadcastReceiver就先結(jié)束了。BroadcastReceiver一旦結(jié)束,此時(shí)BroadcastReceiver的所在進(jìn)程很容易在系統(tǒng)需要內(nèi)存是被優(yōu)先殺死,因?yàn)樗鼘儆诳者M(jìn)程(沒(méi)有任何活動(dòng)組件的進(jìn)程)。如果它的宿主進(jìn)程被殺死,那么正在工作的子線(xiàn)程也會(huì)被殺死,所以采用子線(xiàn)程來(lái)解決時(shí)不可靠的。

?

public void onReceive(Context context,Intent intent){

???????? //發(fā)送Intent啟動(dòng)服務(wù),有服務(wù)來(lái)完成比較耗時(shí)的操作

???????? Intent Service = new Intent(content,XxxService.class);

???????? Context.startService(service);

}

<action android:name=”android.intent.action.BATTERY_CHANGED”/>//電量變化

<action android:name=”android.intent.action.BOOT_COMPLETED”/>//啟動(dòng)完成

<uses-permission

android:name=”android.permission.RECEIVE_BOOT_COMPLETED”/>

?

?

總結(jié)

以上是生活随笔為你收集整理的Android中BroadcastReceiver的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。