Android BroadcastReceiver简介

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chennai1101/article/details/87362554

1. BroadcastReceiver类

BroadcastReceiver用来接收广播,并在onReceive(Context, Intent)方法里面处理广播。

public class DemoBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

    }

}

2. 注册广播

  • 静态注册

    静态注册需要在AndroidMainFest.xml文件中添加receiver标签。

      <receiver android:name=".component.receiver.DemoBroadcastReceiver">
          <intent-filter>
              <action android:name="com.blog.demo.action.receiver" />
          </intent-filter>
      </receiver>
    
  • 动态注册

    动态注册需要在Activity中调用registerReceiver(BroadcastReceiver, IntentFilter)方法

      IntentFilter intentFilter = new IntentFilter("com.blog.demo.action.receiver");
      registerReceiver(mReceiver, intentFilter);
    

3. 发送广播

通过sendBroadcast(Intent)发送广播

Intent intent = new Intent("com.blog.demo.action.receiver");
intent.putExtra("value", "broadcast");
sendBroadcast(intent);

通过sendOrderedBroadcast(Intent, String)发送有序广播

Intent intent = new Intent("com.blog.demo.action.receiver");
intent.putExtra("value", "broadcast");
sendOrderedBroadcast(intent, null);
  • 发送出去的广播被广播接收者按照先后顺序接收
  • 广播接受者按照Priority属性值从大到小排序,Priority属性值相同时,动态注册先于静态注册
  • 先接收的广播接收者可以对广播进行截断,即后接收的广播接收者不再接收到此广播,调用abortBroadcast()方法
  • 先接收的广播接收者可以对广播进行修改,那么后接收的广播接收者将接收到被修改后的广播

Priority属性值的范围是-1000~1000,静态注册的可以在AndroidMainFest.xml文件中配置

<receiver android:name=".component.receiver.DemoBroadcastReceiver">
    <intent-filter android:priority="1000">
        <action android:name="com.blog.demo.action.receiver" />
    </intent-filter>
</receiver>

动态注册则通过setPriority(int)修改

IntentFilter intentFilter = new IntentFilter("com.blog.demo.action.receiver");
intentFilter.setPriority(500);
registerReceiver(mReceiver, intentFilter);

4. 本地广播

Android中的广播可以跨App直接通信,存在有数据安全的问题。使用本地广播,只能在本地应用程序中发送与接收广播,可以起到保护数据安全的作用。

  • 可以在注册广播时将exported属性设置为false,在广播发送和接收时,增设相应权限permission,用于权限验证。

  • 也可以使用LocalBroadcastManager

      LocalBroadcastManager mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
    
      // 注册
      IntentFilter intentFilter = new IntentFilter("com.blog.demo.action.receiver");
      intentFilter.setPriority(500);
      mLocalBroadcastManager.registerReceiver(mReceiver, intentFilter);
    
      // 注销
      mLocalBroadcastManager.unregisterReceiver(mReceiver);
    

5. 常用系统广播

系统操作 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

参考资料: https://www.jianshu.com/p/ca3d87a4cdf3

相关文章
Android Activity简介
Android Service简介
Android ContentProvider简介
Android BroadcastReceiver简介

猜你喜欢

转载自blog.csdn.net/chennai1101/article/details/87362554