BroadCastReceiver的复习

简单跟老师串了一下广播的几个流程,静态注册和动态注册广播,以及从发送者的角度和接收者的角度来设置权限。

首先是监听电量变化的广播,这里使用的动态注册,从Android8.0开始必须要使用动态注册的方式了。

在注册的时候需要一个IntentFilter过滤器,addAction()里面形参是String类型,可以是自己定义的字符串,也可以使用系统定义的,不过系统定义的都有特定的含义。

 

 

 加上权限之后才能接收到电量变化发送的广播

这里添加的是Intent.ACTION_BATTERY_CHANGED,可以理解为我的batteryLevelReceiver能够接收来自action等于Intent.ACTION_BATTERY_CHANGED的发送方发送来的数据。

最后在onDestory方法里面unregisterReceiver来注销接收器。

 

 其实查看源码就能发现,其实每一个系统的功能都对应着一个类,里面为我们提供了很多个常量,我们可以把电池电量的改变看作是一个发送方发送了一个广播,

它为我们提供的这些常量,就可以用来获取到发送方包裹里面的内容,比如下方的内容

 

 其中EXTRA_LEVEL这个常量用来获取电量的值,一般默认是从0-100的整数 EXTRA_SCALE代表最大电量值,要想显示百分比应该使用前者除以后者再×100%

 

 这两个常量代表USB的接入和接出。我一个IntentFilter其实可以添加多个Action,当不同的发送方携带不同的action的时候,我们就可以在onReceive方法里面进行判断,通过

intent.getAction方法来得到我们发送方的action

其次是静态注册广播

 

 这里需要注意有的系统广播是需要加权限的,否则接收不到发送的广播。这里的action里面name属性的值代表的含义是开机之后发送的一个广播

这里还需要注意:静态注册并不会释放掉我们的资源,会一直占用,这里要注意了。

 

 以上两个常量代表的是安装和卸载所对应的action。

 

 对于发送有序广播而言,sendOrderBroadCast是发送的方法,这里的priority代表的是优先级,优先级越高越先收到通知。

’abortBroadCast用来阻断广播的传输。

 

关于sendOrderBroadCast方法一共有七个参数,具体解释如上所示。

这里的第七个参数传递的是一个包裹,我们可以在中途修改广播携带包裹中的内容。

比如我这里有三个接收器,第一个优先级高的先接收到数据之后,先getResultExtras()来获取到bundle,再通过put的一系列方法来修改包裹中的内容

最后通过setResultExtras()方法来修改和设置包裹,这样第二个接收器接收到的数据就会有所不同。

然后是两个重量级的家伙。

第一:Android权限,谁能接收到我的广播

 

 在发送广播的一端通过在xml中设置权限,然后在sendOrderBroadCast的第二个形参中通过Manifest.permission.ORDER_PERMISSION来设置接收方需要拥有persmission权限才能获取到广播。

这里我报错了,太困了,白天再检查。

从接收方的角度,可以先声明一个permissIon,然后添加到receiver标签的permission属性。

在发送方的xml文件里面需要声明user-permission才能像设置权限的接收方发送数据。

posted @ 2023-03-11 01:08  -她的梦-  阅读(22)  评论(0编辑  收藏  举报