广播的概念与定义广播接收者

<pre name="code" class="html">BroadCastRecevier 有两种注册方式

清单文件里注册: 一旦应用程序被部署到手机, 广播接受者就会生效

代码里面注册: 一旦代码所在的进程被杀死了, 广播接受者就失效了.

广播接受者分为两种类型:

有序的广播. 短信到来的广播 电话拨打的广播 
-1000~1000 设置广播的优先级 
android:priority=“1000”
从高优先级->低优先级 依次传递 
abortbroadcast() 方法 可以终止广播事件

无序广播. 
没有优先级 任何人 注册广播接受者的人,都可以接收到广播. 
没有abortboradcast()方法
sendBroadcast(intent); // 发送一条广播 
sendOrderedBroadcast(intent, receiverPermission); // 发送一条有序广播 
sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler, initialCode, initialData, initialExtras) 
如果发送广播的时候 使用的 上面的api发送出去的广播 
第三个参数 resultReceiver 指定了广播的接受者.

即便是中间我把广播给终止 abortbroadcast() 
resultReceiver 还是会接受到广播时间

setResultData(null);

广播接收者;广播就是个收音机,用来接收和发送广播广播的意义;android中系统会发生一些事件的改变,比如,电量变低,收发短信,拨打电话,屏幕解锁系统会发送广播,只要应用程序接收到这条广播,就知道系统发生了什么事件,从而执行相应的代码,使用广播接受者,就可以接收广播
 
 
使用;
1.创建一个广播接受者的类去继承BroadcastReceiver
public class CallReceiver extends BroadcastReceiver {
	/**
	 * 接收到广播就会被调用  清单文件配置
	 */
	@Override
	public void onReceive(Context arg0, Intent arg1) {

	}

}
2.在配置清单文件中在Receiver加上name
<receiver android:name="com.ip.CallReceiver" >
3.同时添加过滤器,指定action的子节点,action的值必须跟要接受的广播匹配,比如如果要接收到电话广播,action的值应为;
  接收电话的<action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
  接收短信的<android.provider.Telephony.SMS_RECEIVED/>
// 短信在安卓中成为数据单元pdus
<span style="white-space:pre">		</span>// 拿到短信数据
<span style="white-space:pre">		</span>bundle = arg1.getExtras();
<span style="white-space:pre">		</span>Object[] object = (Object[]) bundle.get("pdus");
只有action与我们定义的广播相同是,我们才能过接收到广播 当然了广播接收者还有优先级只分从-1000--1000之间(但是也不确定)
<intent-filter android:priority="2*32" >

4.如果广播接收者所在的进程已经关闭,当系统发出的广播中的action跟该广播接收者的action相匹配是,系统会启动该广播的接收者所在的进程,并把广播发送给广播接收者

自定义广播;
1.在一个A的应用中的BroadcaseReceiver中通过 Intent intent =new Intent();
intent.setAction("自定义的广播");
BroadcaseReceiver(intent);
2.在B应用中的配置文件的清单中的action节点上定义  action=“自定义的广播”;即可




猜你喜欢

转载自blog.csdn.net/qq_30442585/article/details/51090007
今日推荐