本文主要是介绍BroadcastReceiver广播传递信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
BroadCast 广播用于程序间的接收、过滤、并处理信息。同时,广播实现方式分为静态广播和动态广播
静态广播:需要在manifest中注册实现。
广播端,继承BroadcastReceiver 重写onReceive()方法处理接收的信息
public class MyBroadCast extends BroadcastReceiver {public static final String MY_SMS_BROADCAST = "com.example.broadcast.sms";//自定义广播标记实现,通过此来发送广播public static final String SYSTEM_SMS_BROADCAST = "android.provider.Telephony.SMS_RECEIVED"; //系统定义字符标记@Overridepublic void onReceive(Context arg0, Intent arg1) {String action = arg1.getAction();if (action.equals(MY_SMS_BROADCAST)) { //实现过滤
<span style="white-space:pre"> </span>//接收处理信息Toast.makeText(arg0, "处理自定义短信广播", Toast.LENGTH_SHORT).show();}else if (action.equals(SYSTEM_SMS_BROADCAST)) {
<pre name="code" class="html"><span style="white-space:pre"> </span>//接收处理信息
Toast.makeText(arg0, "处理系统接收短信", Toast.LENGTH_SHORT).show();}}}
发送信息端, 此处采用按钮点击发送(activity端)
mSMSBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MyBroadCast.MY_SMS_BROADCAST); //将消息发送到标记端sendBroadcast(intent);}});
在manifest中的注册
<receiver android:name="com.example.broadcast.MyBroadCast"><intent-filter><!-- 自定义注册过滤 --><action android:name="com.example.broadcast.sms"></action><!-- 系统接收短信过滤 --><action android:name="android.provider.Telephony.SMS_RECEIVED"></action></intent-filter></receiver>
同时此处运用手机系统所有的功能时应加上权限,此处用到系统短信接收,应加上接收权限
<!-- 广播接收处理短信权限 --><uses-permission android:name = "android.permission.RECEIVE_SMS" />
做到此处,广播的静态实现方式就可以实现了。
但此时还应该注意一个问题:在我们处理信息时在onReceive()方法中不能过久的处理信息,超过10秒左右的耗时操作就会报错(因为广播的生命周期为10秒左右)。
广播的分类:1、普通广播(无序广播) (Normal broadcasts)、大多数情况下使用的
2、有序广播 (Ordered broadcasts)、广播依次发送,有权限问题,看了一下网上大多数情况下说的是权限在-1000到1000之间,数值越大,优先级越高,获取信息者可以更改和删除信息,但我也看到有说最大数值为integer 的最大值,即 2147483647,这个数值我也没有试过,如果用到的时候可以试一下。此方法在静态广播中实现
<intent-filter android:priority="2147483647" > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter>
3、异步广播(粘性消息)
动态广播:在代码中注册实现
public class DynamicBroadCast extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (action.equals("com.example.broadcast")) { //当有多个标志时起作用,此处可省略//处理信息 }}}
public void reciverBroadCast(){receiver = new DynamicBroadCast();IntentFilter filter = new IntentFilter();filter.addAction("com.example.broadcast"); //过滤标志registerReceiver(receiver, filter); //动态注册}
注册时建议在onResume()中注册(与activity生命周期绑定)
@Overrideprotected void onResume() {super.onResume();reciverBroadCast();//注册}
取消时建议在onPause()中
@Overrideprotected void onPause() {super.onPause();if (receiver !=null) {unregisterReceiver(receiver); //取消注册}}
在与service生命周期绑定时为oncreat()和ondestroy()中
这篇关于BroadcastReceiver广播传递信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!