基础
什么是android中的广播?
广播就是在Android系统中发生某件事情(电量,电话的来电与去电等等),然后会向android系统中发送消息的组件
Android系统中发生某件事情,怎么向android系统中发送消息呢?
有两种方式,一个通过发送正常的广播,sendBroadcast(),或者发送有序广播,sendOrderedBroadcast()。
发送正常的广播(也可称为无序广播)和发送有序广播有什么区别呢?
- 正常广播(也可称为无序广播):所有接受者都可同时接受到广播,更加的高效,但是接受者不能取消广播。
- 有序广播:一次只能传递给一个接受者(根据android:priority,)上一级接收者可以传送数据给下一级,并且可以中止广播 。
** Notice: 有序广播的接受是根据
如何使用广播呢?
- 定义广播接收器,继承自BroadcastReceiver或其子类,覆写onReceive()方法。
- 注册定义的广播接收器。
如何注册定义的广播接收者呢?
- 使用代码注册
//监听的广播的动作
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
//注册广播接收者
registerReceiver(new ScreenonReceiver(), filter);
// 在AndroidManifest.xml中配置
<receiver android:name="com.broadcast.ScreenonReceiver"
android:enabled="true">
<intent-filter >
<action android:name="android.intent.action.SCREEN_ON"/>
</intent-filter>
</receiver>
Notice: 使用在AndroidManifest.xml中配置的方式,必须指定android:enabled="true"否则可能导致接收不到广播。
Skill: 最好不要使用AndroidManifest.xml中配置,一般的使用场景是开启service在Service中注册广播接收者,因为这样可以方便的取消注册,可控性比较好。
常用广播的接受
开机启动的广播接收
** Intent.ACTION_BOOT_COMPLETED ** 监听此动作的权限:
RECEIVE_BOOT_COMPLETED
屏幕唤醒的广播接收
监听的广播的动作为:Intent.ACTION_SCREEN_ON
屏幕关闭的广播接收
监听的广播的动作为:Intent.ACTION_SCREEN_OFF
来电广播的接收
监听的广播的动作为:
android.intent.action.PHONE_STATE
监听此动作时要加权限,READ_PHONE_STATE
去电广播的接收
监听的广播的动作为:
Intent.ACTION_NEW_OUTGOING_CALL
所要求的权限READ_PHONE_STATE,PROCESS_OUTGOING_CALLS
短信到来的广播接收
android.provider.Telephony.SMS_RECEIVED
所需要的权限RECEIVE_SMS
发送广播
发送无序广播
//action:自定义的动作,
Intent intent = new Intent(action);
sendBroadcast(intent);
如果想加权限使用 ** sendBroadcast(intent,receiverPermission); **
发送有序广播
//action:自定义的动作,
Intent intent = new Intent(action);
sendOrderedBroadcast(intent, receiverPermission);
Skill: 对于只在本应用使用的广播建议使用LocalBroadcastManager进行发送广播,接受广播,好处是:
- 更加高效,
- 不必担心其他应用能够接收到广播,防止了广播中携带的数据被窃取。