一、简介
广播是任何应用均可接收的消息,分为标准广播和有序广播两种。系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播。
二、接收广播
想要接受广播,需要注册广播接收者。Android提供了两种注册方式:静态注册和动态注册。静态注册的广播接收者可以在未启动应用的情况下就接收到自己感兴趣的广播,动态注册则更灵活。
2.1静态注册
1.继承BroadcastReceiver实现广播接收者。
<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>
注意:接收某些广播需要声明权限
2.2动态注册
registerReceiver()和unregisterReceiver()可以动态注册和取消广播。
registerReceiver(BroadcastReceiver, IntentFilter)动态注册广播
registerReceiver(BroadcastReceiver, IntentFilter, String, android.os.Handler)动态注册并声明权限
1.实现BroadcastReceiver。
这一步和上面的静态广播一样
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>
三、发送广播
3.1 发送标准广播
sendBroadcast(Intent)可以发送标准广播
sendBroadcast(Intent, String)可以发送有权限的广播,接收此广播者需要声明相应权限。
3.2 发送有序广播
sendOrderedBroadcast(Intent)可以发送有序广播
sendOrderedBroadcast(Intent, String, BroadcastReceiver, android.os.Handler, int, String, Bundle)可以发送有权限的有序广播
四、本地广播
全局广播可以被各个应用程序接收处理,本地广播则只在本应用内部传递,增加了广播的安全性。本地广播使用LocalBroadcastManager来管理广播,广播的发送和接收都通过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);
}
//发送本地广播
Intent intent = new Intent(Intent.ACTION_DATE_CHANGED);
localBroadcastManager.sendBroadcast(intent);
</code>
五、广播的声明周期
BroadcastReceiver只在onReceive方法中有效,该方法返回则BroadcastReceiver结束。