您的位置:首页 > 其它

BroadcastReceiver广播传递信息

2015-11-09 18:55 465 查看
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"; //系统定义字符标记
@Override
public 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() {

@Override
public 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{

@Override
public 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生命周期绑定)

@Override
protected void onResume() {
super.onResume();
reciverBroadCast();//注册
}
取消时建议在onPause()中

@Override
protected void onPause() {
super.onPause();
if (receiver !=null) {
unregisterReceiver(receiver);  //取消注册
}
}
在与service生命周期绑定时为oncreat()和ondestroy()中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: