Android 广播 BroadcastReceiver

静态注册和动态注册的区别:

动态注册的广播接收器可以自由的控制注册和取消,有很大的灵活性。但是只能在程序启动之后才能收到广播,此外,不知道你注意到了没,广播接收器的注销是在onDestroy()方法中的。所以广播接收器的生命周期是和当前活动的生命周期一样。

静态注册的广播不受程序是否启动的约束,当应用程序关闭之后,还是可以接收到广播。(部分系统广播不支持静态注册)

第一步:创建一个类继承 BroadcastReceiver类 实现OnReceive方法

public class BatteryBroadcast extends BroadcastReceiver {
    
    @Override
    public void onReceive(Context context, Intent intent) {
        //日志输出
        Log.i("MainActivity", intent.getData() + "---" + intent.getType() + "---" + intent.getAction() + "----" + intent.getClass());
        //打印
        System.out.println(intent.getData() + "---" + intent.getType() + "---" + intent.getAction() + "----" + intent.getClass());
    }
}

静态注册:在AndroidManifest.xml里面配置

        <!---监听电量变化的广播-->
        <receiver
            android:name="com.example.myapplication.BatteryBroadcast"
            android:exported="true">
         <!---添加过滤器,也就是要监听的规则-->
            <intent-filter>
                <action android:name="android.intent.action.BATTERY_CHANGED" />
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

动态注册:

        //静态注册广播接收器
        IntentFilter intentFilter = new IntentFilter();
        //监听电量变化广播
        intentFilter.addAction("android.intent.action.BATTERY_CHANGED");
        //监听电池充电广播
        intentFilter.addAction("android.intent.action.ACTION_POWER_CONNECTED");
        registerReceiver(new BatteryBroadcast(), intentFilter);

发送广播:

Intent intent = new Intent(); 
intent.setAction("android.intent.action.BATTERY_CHANGED");//这是错误的不能发送安卓系统的广播
 intent.setAction("zhaoshao");//可以发送自定义的
//Android8.0以上需要设置ComponentName
intent.setComponent(new ComponentName("com.example.zhao", "com.example.myapplication.BatteryBroadcast"));
sendBroadcast(intent);

销毁广播接收器:

 //销毁广播接收器
//unregisterReceiver(new BatteryBroadcast());
THE END
喜欢就支持一下吧
点赞6 分享