什么是广播?
电台以特定频率发出的信息,叫做广播。
收音机:
调整收音机的频率和电台一致,就能收到广播。
案例:
开机自启的原理:
系统在手机开机的时候,会以特定频率
发送一个开机的广播,某些app里面设定有特定频率的收音机,
这些收音机能够接收到开机广播,进而开启 Activity或者Service.
优酷App:
如果当前是wifi环境,则自动播放视频;
如果是3g或者4g网络,则不会自动播放视频。
一旦网络环境发生变化,系统会发送一个特定广播,
优酷App接收到当前广播,就能从广播信息中得到当前网络的情况。
安卓四大组件:
Activity
ContentProvider
Service
收音机---BroadCastReceiver
BroadCastReceiver分解:
BroadCast广播
Receiver 接收者
广播接收者的实现步骤:
1,自定义 BroadCastReceiver的子类
重写onReceive()方法
2,在当前app的清单文件中注册广播接收者。
一定要设置广播接收者的频率。
<receiver
android:name="com.example.app_1.receiver.App_1_MyReceiver_1"
>
<intent-filter>
<action android:name="com.tz.receiver.myChanel"/>
</intent-filter>
</receiver>
3,模拟电台,发送特定频率的广播。
Intent intent=new Intent();
intent.setAction("频率");
xxx xxx
sendBroadCast( intent );
4,系统会匹配到特定的收音机,然后回调其onReceive()方法。
广播的分类:
1,系统广播
无序广播
有序广播
2,普通广播
无序广播
有序广播
实现:
APP_1 发送广播之后,
我们希望四个收音机接收到广播的顺序如下:
APP_2_MyReceiver_1 4
APP_1_MyReceiver_3 3
APP_1_MyReceiver_2 2
APP_1_MyReceiver_1 1
1,设置四个收音机的优先级。
优先级取值范围 -1000 到 1000
默认是0.
2,模拟电台发送广播的时候,不要采用
sendBroadCast(Intent intent)
而是
sendOrederedBroadCast(Intent intent);
有序广播的特点:
1,优先级高的收音机在接收到广播之后,
可以终止广播向优先级低的收音机传播
onReceive(){
abortBroadCast();
}
2.更改数据。
注意:不是更改intent里面的数据。
问题1:
APP_1,可以发送广播,如果不做任何操作,
我们已经证明 APP_1三个收音机和 APP_2里面的一个收音机
都能接收到广播。
但是,我们此时希望APP_1发送的广播,
只能是APP_1里面的三个收音机接收到广播。
解决方案1:
增加权限给APP_1,APP_2因为没有权限,
即时频率匹配广播,因为没有权限也是接收不到的。
解决方案2:
电台在发送广播的时候,
可以明确规定广播的传递范围。
//通过intent,可以设置当前广播的传递范围。
intent.setPackage(getPackageName());
问题2:
APP_2这里面有个一个收音机,这个收音机主要处理的是
当前APP_2发送的广播。 我们不希望APP_2里面的收音机接收到
其他App发过来的广播。
android:exported="true"表示可以接收外部app发过来的广播
反之,不接收外部app发过来的广播。
整理自教程