静态注册和动态注册的区别:
动态注册的广播接收器可以自由的控制注册和取消,有很大的灵活性。但是只能在程序启动之后才能收到广播,此外,不知道你注意到了没,广播接收器的注销是在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