Brodcast

基础

什么是android中的广播?

广播就是在Android系统中发生某件事情(电量,电话的来电与去电等等),然后会向android系统中发送消息的组件

Android系统中发生某件事情,怎么向android系统中发送消息呢?

有两种方式,一个通过发送正常的广播,sendBroadcast(),或者发送有序广播,sendOrderedBroadcast()。

发送正常的广播(也可称为无序广播)和发送有序广播有什么区别呢?

  1. 正常广播(也可称为无序广播):所有接受者都可同时接受到广播,更加的高效,但是接受者不能取消广播。
  2. 有序广播:一次只能传递给一个接受者(根据android:priority,)上一级接收者可以传送数据给下一级,并且可以中止广播 。

** Notice: 有序广播的接受是根据属性中priority来判断优先级的,对于优先级越高,越较早接收到广播,相同的优先级,会根据AndroidManfiest.xml中的顺序调用。**

如何使用广播呢?

  1. 定义广播接收器,继承自BroadcastReceiver或其子类,覆写onReceive()方法。
  2. 注册定义的广播接收器。

如何注册定义的广播接收者呢?

  • 使用代码注册
//监听的广播的动作
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进行发送广播,接受广播,好处是:

  • 更加高效,
  • 不必担心其他应用能够接收到广播,防止了广播中携带的数据被窃取。
updatedupdated2020-06-132020-06-13