-广播是跨进程的通信方式,任何应用都可以收到不同程序发出的广播。
接收广播需要进行广播注册,才能接收到对应广播。
//实例化IntentFilter和MyReceiver对象
IntentFilter intentFilter = new IntentFilter();
MyReceiver myReceiver = new MyReceiver();
//为IntentFilter添加action,广播接收器才能监听到发出以下值的广播
intentFilter.addAction("android.intent.action.ACTION_POWER_CONNECTED");
//注册,传入广播接收器对象和IntentFilter对象
registerReceiver(myReceiver,intentFilter);
//在onDestroy里解除注册
@Override
protected void onDestroy(){
super.onDestroy();
unregisterReceiver(myReceiver);
<application>下添加新标签<receiver>
Android Studio快捷创建广播接收器,右键包名->New->Other->Broadcast Receiver
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".MyReceiver" //广播接收器名
android:enabled="true" //表示是否启用此广播接收器
android:exported="true"> //表示是否允许接收本程序以外的广播
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
//添加相应广播值的action
</intent-filter>
</receiver>
</application>
创建广播接收器,定义一个类继承自BroadcastReceiver,并重写父类onReceive()方法,当接收到广播时,就会执行onReceive()方法
广播接收器中不允许开启线程,因为广播接收器生命周期非常短,容易对开启的线程失去控制
不要在onReceive()方法中添加过多逻辑或耗时操作
public class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
//实现逻辑
发送自定义广播
1.发送标准广播
Intent intent=new Intent("com.example.MY_BROADCAST");
sendBroadcast(intent);
构建一个Intent对象,将要发送的广播值传入,然后调用sendBroadcast()方法,就可以将此广播发送出去
2.发送有序广播
Intent intent = new Intent("com.example.MY_BROADCAST");
//传入Intent对象,第二个参数与权限有关的字符串,可传入null
sendOrderedBroadcast(intent,null);
发送有序广播,广播接收器有接收顺序,优先级高的先接收到,并可以阻断其继续传播,在onReceive()方法中调用abortBroadcast()方法,截断这条广播
在AndroidManifest.xml中设置广播接收器的优先级priority
<receiver
.......
<intent - filter android:priority="100">
<action ........................../>
</intent - filter>
</receiver>
使用本地广播
本地广播只在应用内部传递,使用本地广播主要使用LocalBroadcastManager对广播进行管理,并提供发送广播和注册广播接收器的方法
//调用getInstance()得到LocalBroadcastManager对象
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
//广播接收器对象和IntentFilter对象
MyReceiver myreceiver = new MyReceiver();
IntentFilter intentFilter = new IntentFilter();
//添加action
intentFilter.addAction("com.example.MY_BROADCAST");
//注册本地广播监听器
localBroadCastManager.registerReceiver(myReceiver,intentFilter);
//解除注册
localBroadcastManager.unregisterReceiver(myReceiver);