——————————————————————————————————————————
广播BroadcastReceiver:
主要是用来处理操作系统与应用程序间的通信。响应系统或程序的广播消息
静态注册:在AndroidManifest中注册,不需要启动应用也能自行注册,不会释放资源,耗资源
动态注册:与activity的生命周期一起消亡,节省资源
以接收设备开关机的广播为例:
注册步骤:
1、创建一个广播接收者继承自BroadcastReceiver
public class BootCompleteReceiver extends BroadcastReceiver
2、在AndroidManifest中注册一个receiver
<receiver android:name=".BootCompleteReceiver">
</receiver>
3、在receiver中新建一个intentfilter,用于设置action
<receiver android:name=".BootCompleteReceiver">
<intent-filter>
</intent-filter>
</receiver>
4、设置action
<receiver android:name=".BootCompleteReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
5、如果需要添加权限,要在AndroidManifest中添加user-premission权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
此时已经注成功广播了,可以在broadcastreceiver中查看效果:
public class BootCompleteReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action=intent.getAction();
Log.d("BootCompleteReceiver","action is "+action);
Log.d("BootCompleteReceiver","开机成功");
Toast.makeText(context,"收到开机完成的广播",Toast.LENGTH_SHORT).show();
}
}
以接收当前电量广播为例:
1、创建一个广播接收者继承自BroadcastReceiver
private class BatteryLevelReceiver extends BroadcastReceiver
2、创建一个intentfilter
IntentFilter intentFilter=new IntentFilter();
3、设置action
intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
4、创建广播接收者
batteryLevelReceiver = new BatteryLevelReceiver();
5、 注册广播
this.registerReceiver(batteryLevelReceiver,intentFilter);
为了查看效果可在广播接收者broadcastreceiver中获取action并打印输出:
String action = intent.getAction();
6、 销毁广播,在activity的ondestroy的方法中销毁,前面已经提过动态注册的消亡是和activity一起的,为了销毁广播,将broadreceiver的声明放到外面去即可
@Override
protected void onDestroy() {
super.onDestroy();
//取消广播注册,否则会导致内存泄漏
//先判断广播接收者是否为空,不为空就需要注销,此时需要将广播接收者设为成员变量才可以调用
if(batteryLevelReceiver!=null){
this.unregisterReceiver(batteryLevelReceiver);
}
}