Android 四大组件之广播(Broadcast)

一、广播是什么?

广播分为发送者和接受者,可以理解为发送者发送通知,接受者可以选择接收通知
广播分为系统广播和本地广播,系统广播可以分为标准和有序
标准广播:一但发出所有接收者同时受到
有序广播:接收者按优先级受到而且可以截断

本地广播:以上都是系统全局广播,发出的广播可以被其他任何应用接收这样容易产生安全问题,所以有了本地广播只能在应用程序内部传递。

二、广播的注册

分为动态和静态注册
静态注册:
静态注册的广播在应用安装时由系统自动注册完成,必须在AndroidManifest.xml中声明,单独一个类不能像动态一样可以在某个类里面,否则抛异常。可以监听手机的开关机。静态注册是当程序关闭后,如果有广播发过来,还能启动程序。只要设备开启状态广播就能接受。

动态注册:比静态优先级高,不需要在AndroidManifest.xml中声明,但是周期短随着context的终止而终止。

三、广播简单使用

1:标准广播(动态注册)

 Intent intent = new Intent("aaaaaa");
  intent.putExtra("key111", "value111"); //可以携带参数去参数时
  sendBroadcast(intent) ; //广播也是使用intent发送的
public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("测试测试测试", "onReceive: 收到广播aaaaa");
        
        //如果多条广播可以使用下面方法判断收到哪一条
        String action = intent.getAction();
        if("android.intent.action.SIM_STATE_CHANGED".equals(action)){
            //接收广播消息
         String  bValue= intent.getStringExtra("key111");//bValue值就是:value111
            Log.e(TAG,"SIM卡有变动");
        }

    }
}
 MyBroadcastReceiver screen=new  ScreenBroadcastReceiver ();//实例化一下广播接收器
    IntentFilter filter = new IntentFilter();//添加一个过滤器只接受“aaaaaaa”广播
    filter.addAction("aaaaaa");
    registerReceiver(screen, filter);

最后别忘了销毁广播
unregisterReceiver(screen);

标准广播(静态注册):不一样的一点就是把过滤器写到AndroidManifest.xml文件中

 Intent intent = new Intent("aaaaaa");
  sendBroadcast(intent) ; //广播也是使用intent发送的
public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("测试测试测试", "onReceive: 收到广播aaaaaa");
    }
}

在AndroidManifest.xml中注册,让MyBroadcastReceiver 接收一条aaaaaa广播

<receiver android:name=".MyBroadcastReceiver">
            android:enabled="true"
            android:exported="true"
            <intent-filter>
                <action android:name="aaaaaa"/>
            </intent-filter>
 </receiver>

2:有序广播

和标准广播不一样的就是接收器的接收有先后顺序,且前面可以将广播截断
Intent intent = new Intent(“aaaaaa”);
sendOrderedBroadcast(intent,null) ; //第二哥参数是和权限有关的直接null

public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("测试测试测试", "onReceive: 收到广播aaaaaa");
        abortBroadcast();//表示截断广播
    }
}

在AndroidManifest.xml中注册,让MyBroadcastReceiver 接收一条aaaaaa广播,不一样的就孙有优先级

<receiver android:name=".MyBroadcastReceiver">
            android:enabled="true"
            android:exported="true"
           <intent-filter android:priority="100">  //优先级越高越先接收到
                <action android:name="aaaaaa"/>
            </intent-filter>
 </receiver>

3:本地广播

以上广播都是全局的被其他应用也能接收,很不安全,本地广播只能在本app内应用。
本地广播需要获取示列;

LocalBroadcastManager localBroadcastManager=LocalBroadcastManager.getInstance(mContext);//获取广播实列

       Intent intent = new Intent("aaaaaa");
        localBroadcastManager.sendBroadcast(intent) ;//发送广播
        
  public class MyBroadcastReceiver extends BroadcastReceiver {   
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("测试测试测试", "onReceive: 收到广播aaaaa");
    }
}

 MyBroadcastReceiver screen=new  ScreenBroadcastReceiver ();//实例化一下广播接收器
    IntentFilter filter = new IntentFilter();//添加一个过滤器只接受“aaaaaaa”广播
    filter.addAction("aaaaaa");
    localBroadcastManager.registerReceiver(screen, filter);

四、常用的系统广播

这些广播是手机系统发送的我们只需要接收就行

监听网络变化 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_HEADSET_PLUG
未正确移除SD卡但已取出来时(正确移除方法:设置-SD卡和设备内存-卸载SD卡) Intent.ACTION_MEDIA_BAD_REMOVAL
成功安装apk Intent.ACTION_PACKAGE_ADDED
成功删除apk Intent.ACTION_PACKAGE_REMOVED
重启设备 Intnet.ACTION_REBOOT
屏幕被关闭 Intent.ACTION_SCREEN_OFF
屏幕被打开 Intent.ACTION_SCREEN_ON

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值