BroadcastReceiver小結(jié)

一、簡介

廣播是任何應(yīng)用均可接收的消息,分為標準廣播和有序廣播兩種。系統(tǒng)將針對系統(tǒng)事件(例如:系統(tǒng)啟動或設(shè)備開始充電時)傳遞各種廣播。

二、接收廣播

想要接受廣播,需要注冊廣播接收者。Android提供了兩種注冊方式:靜態(tài)注冊和動態(tài)注冊。靜態(tài)注冊的廣播接收者可以在未啟動應(yīng)用的情況下就接收到自己感興趣的廣播,動態(tài)注冊則更靈活。

2.1靜態(tài)注冊

1.繼承BroadcastReceiver實現(xiàn)廣播接收者。
<code>public class StaticBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"onReceive",Toast.LENGTH_SHORT).show();
}
}</code>
2.AndroidManifest中注冊自己感興趣的廣播
<code><receiver
android:name=".broadcastreceiver.StaticBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.DATE_CHANGED"/>
</intent-filter>
</receiver></code>
注意:接收某些廣播需要聲明權(quán)限

2.2動態(tài)注冊

registerReceiver()和unregisterReceiver()可以動態(tài)注冊和取消廣播。
registerReceiver(BroadcastReceiver, IntentFilter)動態(tài)注冊廣播
registerReceiver(BroadcastReceiver, IntentFilter, String, android.os.Handler)動態(tài)注冊并聲明權(quán)限
1.實現(xiàn)BroadcastReceiver。
這一步和上面的靜態(tài)廣播一樣
2.代碼中注冊
<code>doBroadcastReceiver = new DoBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_DATE_CHANGED);
registerReceiver(doBroadcastReceiver,intentFilter);</code>
3.取消注冊
<code>if(doBroadcastReceiver != null){
unregisterReceiver(doBroadcastReceiver);
}</code>

三、發(fā)送廣播

3.1 發(fā)送標準廣播

sendBroadcast(Intent)可以發(fā)送標準廣播
sendBroadcast(Intent, String)可以發(fā)送有權(quán)限的廣播,接收此廣播者需要聲明相應(yīng)權(quán)限。

3.2 發(fā)送有序廣播

sendOrderedBroadcast(Intent)可以發(fā)送有序廣播
sendOrderedBroadcast(Intent, String, BroadcastReceiver, android.os.Handler, int, String, Bundle)可以發(fā)送有權(quán)限的有序廣播

四、本地廣播

全局廣播可以被各個應(yīng)用程序接收處理,本地廣播則只在本應(yīng)用內(nèi)部傳遞,增加了廣播的安全性。本地廣播使用LocalBroadcastManager來管理廣播,廣播的發(fā)送和接收都通過LocalBroadcastManager來進行。因此,也本地廣播無法在AndroidManifest中注冊。
<code>//獲取LocalBroadcastManager
localBroadcastManager = LocalBroadcastManager.getInstance(this);
//廣播接收者
doBroadcastReceiver = new DoBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_DATE_CHANGED);
//注冊本地廣播接收
localBroadcastManager.registerReceiver(doBroadcastReceiver,intentFilter);
//取消本地廣播接收
if(doBroadcastReceiver != null){
localBroadcastManager.unregisterReceiver(doBroadcastReceiver);
}
//發(fā)送本地廣播
Intent intent = new Intent(Intent.ACTION_DATE_CHANGED);
localBroadcastManager.sendBroadcast(intent);
</code>

五、廣播的聲明周期

BroadcastReceiver只在onReceive方法中有效,該方法返回則BroadcastReceiver結(jié)束。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容