四大组件---BroadcastReceiver初步认识

前言

属于Android四大组件之一

分为:广播发送者,广播接收者

应用场景

1.不用组件之间通信

2.多线程通信

3.与Android系统在特定情况下通信

发送者

Intent intent = new Intent();
intent.setAction("sign:123456789");
intent.putExtra("temp", "测试广播");
sendBroadcast(intent);

接收者BroadcastReceiver

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println(intent.getStringExtra("temp"));
    }
}

临时注册

@Override
protected void onResume() {
    super.onResume();
    myBroadcastReceiver = new MyBroadcastReceiver();
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("sign:123456789");
    registerReceiver(myBroadcastReceiver, intentFilter);
}

解除注册

@Override
protected void onPause() {
    super.onPause();
    //销毁在onResume()方法中的广播
    unregisterReceiver(myBroadcastReceiver);
}

长期注册

<receiver android:name=".MyBroadcastReceiver">
    <intent-filter>
        <action android:name="sign:123456789" />
    </intent-filter>
</receiver>

注意

Android 8.0更新中提到对于大部分静态注册广播不再有效,推荐使用临时注册方式

dog bird cat
q b c
  1. 系统广播(System Broadcast)

Android中内置了多个系统广播:只要涉及到手机的基本操作(如开机、网络状态变化、拍照等等),都会发出相应的广播
每个广播都有特定的Intent - Filter(包括具体的action),Android系统广播action如下:

系统操作 action
监听网络变化 android.net.conn.CONNECTIVITY_CHANGE
关闭或打开飞行模式 Intent.ACTION_AIRPLANE_MODE_CHANGED
充电时或电量发生变化 Intent.ACTION_BATTERY_CHANGED
电池电量低 Intent.ACTION_BATTERY_LOW
电池电量充足 (即从电量低变化到饱满时会发出广播 Intent.ACTION_BATTERY_OKAY
系统启动完成后(仅广播一次) Intent.ACTION_BOOT_COMPLETED
按下照相时的拍照按键(硬件按键)时 Intent.ACTION_CAMERA_BUTTON
屏幕锁屏 Intent.ACTION_CLOSE_SYSTEM_DIALOGS
设备当前设置被改变时(界面语言、设备方向等) Intent.ACTION_CONFIGURATION_CHANGED
插入耳机时 Intent.ACTION_HEADSET_PLUG
未正确移除SD卡但已取出来时(正确移除方法:设置--SD卡和设备内存--卸载SD卡) Intent.ACTION_MEDIA_BAD_REMOVAL
插入外部储存装置(如SD卡) Intent.ACTION_MEDIA_CHECKING
成功安装APK Intent.ACTION_PACKAGE_ADDED
成功删除APK Intent.ACTION_PACKAGE_REMOVED
重启设备 Intent.ACTION_REBOOT
屏幕被关闭 Intent.ACTION_SCREEN_OFF
屏幕被打开 Intent.ACTION_SCREEN_ON
关闭系统时 Intent.ACTION_SHUTDOWN
重启设备 Intent.ACTION_REBOOT

注:当使用系统广播时,只需要在注册广播接收者时定义相关的action即可,并不需要手动发送广播,当系统有相关操作时会自动进行系统广播

应用内广播

原因

1.其他app的action 相同 app一直收到其他app的广播
2.为了安全性
3.提升效率

注册

@Override
protected void onResume() {
    super.onResume();
    myBroadcastReceiver = new MyBroadcastReceiver();
    IntentFilter intentFilter = new IntentFilter();
    LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
    intentFilter.addAction("sign:123456789");
    localBroadcastManager.registerReceiver(myBroadcastReceiver, intentFilter);
}

取消注册

@Override
protected void onPause() {
    super.onPause();
    //销毁在onResume()方法中的广播
    LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);
    localBroadcastManager.unregisterReceiver(myBroadcastReceiver);
}

发送广播

Intent intent = new Intent();
intent.setAction("sign:123456789");
intent.putExtra("temp", "测试广播");
LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(Main.this);
localBroadcastManager.sendBroadcast(intent);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容