Android学习笔记之BroadcastReceiver

一、BroadcastReceiver的动态注册方法

1.新建一个广播接收者的类去继承BroadcastReceiver,重写其onReceive方法

class NetworkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //每当收到广播时,该方法便会执行
    }
}

2.新建一个IntentFilter对象,并为其添加Action的值,这里以监听网络状态变更为例

intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");

3.新建广播接收者的实例,并注册该广播接收者

networkChangeReceiver = new NetworkChangeReceiver();
registerReceiver(networkChangeReceiver,intentFilter);

4.最后要记得,动态注册的广播接收者一定要取消注册才行,这里我就在onDestroy()方法中取消注册

@Override
protected void onDestroy() {
    super.onDestroy();
    unregisterReceiver(networkChangeReceiver);
}

二、BroadcastReceiver的静态注册方法

 1.和动态注册一样,新建一个广播接收者的类去继承BroadcastReceiver,重写其onReceive方法

public class BootCompleteReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //每当收到广播时,该方法便会执行
    }
}

2.打开AndroidManifest.xml文件,给我们刚才创建的广播接收者进行注册

<receiver
    android:name=".BootCompleteReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

这里的enabled属性为true表示启用该广播接收者,这里的exported属性为true表示允许该广播接收者接收本程序以外的广播,这里以监听开机广播为例,因此设置值为true。然后在receiver的标签体内添加intent-filter便签,并为其添加action的值,这里是要监听开机广播,因此值为android.intent.action.BOOT_COMPLETED。

3.因为这里监听的是系统开机广播,所以还需添加一条权限标签

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

三、发送标准广播(无序广播)

1.新建一个intent对象,并为其添加action的值

Intent intent = new Intent();
intent.setAction("com.xxxx.xxxxx.broadcastreceivertest.MY_BROADCAST");
sendBroadcast(intent);

值得注意的是,这里的action的值应该与注册的广播接收者中的action值保持一致。

2.如果是在Android8.0及以后的版本发送给静态注册的广播接收者,还需要给intent设置component

//Android8.0之后需要设置ComponentName来指定广播接收者的包名类名
intent.setComponent(new ComponentName("com.xxxx.xxxxx.broadcastreceivertest","com.xxxx.xxxxx.broadcastreceivertest.MyBroadcastReceiver"));

其中第一个参数为自定义广播接收者所在的包名,第二个参数为自定义广播接收者的包名类名。

四、发送有序广播

1.因为我目前用的开发环境是Android8.1,8.0之后的版本不再推荐使用静态注册的方式了。因此我在测试时写的两个应用的广播接收者均为动态注册,在发送有序广播时,动态注册为其配置优先级的方法如下:

intentFilter2.setPriority(50);

2.然后发送广播的方法为

sendOrderedBroadcast(intent,null);

然后这里我尝试了一下,即使用之前的sendBroadcast()方法也是可以的,只要设置好了优先级即可。

3.优先级高的广播接收者截断广播的方法为

abortBroadcast();

五、使用本地广播

1.声明本地广播管理器并获得它的实例

//本地广播管理器
private LocalBroadcastManager localBroadcastManager;
localBroadcastManager = LocalBroadcastManager.getInstance(this);

2.注册广播接收者的方法变更为:

localBroadcastManager.registerReceiver(myBroadcastReceiver,intentFilter2);

3.注销广播接收者的方法变更为:

localBroadcastManager.unregisterReceiver(myBroadcastReceiver);

4.发送广播的方法变更为:

localBroadcastManager.sendBroadcast(intent);

猜你喜欢

转载自blog.csdn.net/Ein3614/article/details/81366232
今日推荐