【Android-Broadcast】静态广播注册和动态广播注册

Android广播注册

1、静态、动态注册的概念及区别

2、静态注册

3、动态注册

——————————————————————————————————————————

广播BroadcastReceiver:
主要是用来处理操作系统与应用程序间的通信。响应系统或程序的广播消息

1、静态、动态注册的概念及区别

 静态注册:在AndroidManifest中注册,不需要启动应用也能自行注册,不会释放资源,耗资源
 动态注册:与activity的生命周期一起消亡,节省资源

2、静态注册

以接收设备开关机的广播为例:

注册步骤:
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" />

【Android-Broadcast】静态广播注册和动态广播注册_第1张图片
此时已经注成功广播了,可以在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();
    }
}

【Android-Broadcast】静态广播注册和动态广播注册_第2张图片

3、动态注册

以接收当前电量广播为例:

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();

【Android-Broadcast】静态广播注册和动态广播注册_第3张图片

6、 销毁广播,在activity的ondestroy的方法中销毁,前面已经提过动态注册的消亡是和activity一起的,为了销毁广播,将broadreceiver的声明放到外面去即可

@Override
protected void onDestroy() {
    super.onDestroy();
    //取消广播注册,否则会导致内存泄漏
    //先判断广播接收者是否为空,不为空就需要注销,此时需要将广播接收者设为成员变量才可以调用
    if(batteryLevelReceiver!=null){
        this.unregisterReceiver(batteryLevelReceiver);
    }
}

【Android-Broadcast】静态广播注册和动态广播注册_第4张图片

你可能感兴趣的:(Android学习,#)