广播接收器—Broadcast Receiver(一)
来源:互联网 发布:seo的优化 编辑:程序博客网 时间:2024/05/01 11:46
广播接收器是android 应用程序的四大组件之一。但我来理解,还是很容易就理解的,就像是现场搞个活动抽奖一样,既然是要抽奖,首先第一步就要给抽奖的人发放数字编号(相当于注册接收器),然后再把这些相同的编号放到一个纸箱子里面,在没有抽之前,谁也不到会抽到哪个号,接下来主持人会抽出第一个号码,第二个,第三个……下面的人一定得和主持人抽到的号码一样才能中奖,抽到一样的号码就是重点,对号入座啊,中奖之后就随便由中奖者处置这个奖品了。这就像我发送一条广播到android系统,只有和这条信息相对应的接收器才能接收,比如接收一条短信,必须指定一个广播动作才能接收,对号入座嘛,然后就可以在onReceive 这个方法中实现自己想要干的事情了。
我解释的可能不好,看到的觉得不好请原谅哈,本人表达能力不是特别好。
下面就来写个短信拦截的例子
第一步:注册广播接收器
注册接收器有两种方法,一种是在manifest.xml文件中注册,另一种用java代码注册。
在manifest 中注册
<receiver android:name=".TestRecevier"> <intent-filter> <action android:name="android.intent.action.EDIT"/> </intent-filter> </receiver>
package mobile.android.register.receiver;import android.app.Activity;import android.content.IntentFilter;import android.os.Bundle;import android.view.View;import android.widget.Toast;public class Main extends Activity{private ShortMessageReceiver shortMessageReceiver;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);shortMessageReceiver = new ShortMessageReceiver();} public void onClick_Register_Broadcast(View view){ registerReceiver(shortMessageReceiver, new IntentFilter( "android.provider.Telephony.SMS_RECEIVED"));Toast.makeText(this, "注册成功", Toast.LENGTH_LONG).show();}public void onClick_Unregister_Broadcast(View view){unregisterReceiver(shortMessageReceiver);Toast.makeText(this, "注销成功", Toast.LENGTH_LONG).show();}}这是用java代码注册。
package mobile.android.register.receiver;import java.util.Set;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.telephony.SmsMessage;import android.util.Log;import android.widget.Toast;public class ShortMessageReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent){Bundle bundle = intent.getExtras();if (bundle != null){Set<String> keys = bundle.keySet();for (String key : keys){Log.d("key", key);}Object[] objArray = (Object[]) bundle.get("pdus");SmsMessage[] messages = new SmsMessage[objArray.length];for (int i = 0; i < objArray.length; i++){messages[i] = SmsMessage.createFromPdu((byte[]) objArray[i]);String s = "通过代码注册\n手机号:" + messages[i].getOriginatingAddress()+ "\n";s += "短信内容:" + messages[i].getDisplayMessageBody();Toast.makeText(context, s, Toast.LENGTH_LONG).show();}} }}接收在广播后执行onReceive方法。
这里还需相应的权限
<uses-permission android:name="android.permission.RECEIVE_SMS" />
广播机制理解起来不是不是特别难。还有一个问题就是两种注册方法有什么区别呢?
在androidmanifest.xml文件注册,如果应用程序关掉了,依然可以接受到广播消息,比如监控电池的电量,应用程序关了,还是一样可以监控到电量的变化。但是有些情况是不合适的,不如在窗口中更新控件的状态,这个在manifest中注册就不是很合适了,这时候就应该用java代码来注册,这个有什么好处呢,这个可以随时打开应用程序,随时注册,当你不想用了,关闭应用程序,接收器也就销毁了。这就是两者的区别。
广播接收器的优先级问题
通过<intent-filter>标签中的android:priority 来设置调用的优先级,属性值越大,优先级就越高。比如android:priority=“500” 比android:priority=“1000”要小。这个属性只适合同步处理方式,对于异步处理方式,则调用的顺序除了鱼优先级有关,还和android系统的并发调度有关。
- 广播接收器—Broadcast Receiver(一)
- broadcast receiver广播接收器
- 广播接收器—Broadcast Receiver(二)
- Broadcast Receiver(广播接收器)
- Broadcast Receiver(广播接收器)
- Broadcast Receiver(广播接收器)
- Broadcast Receiver(三)广播接收器的优先级
- 四大组件之广播接收器-Broadcast Receiver
- 玩转Android---组件篇---Broadcast Receiver(广播接收器)
- Broadcast Receiver(二)用代码注册广播接收器
- Android学习笔记之广播接收器(Broadcast Receiver)
- 玩转Android---组件篇---Broadcast Receiver(广播接收器)
- Android四大组件之广播接收器 Broadcast Receiver
- BroadCast广播接收器
- Broadcast广播接收器
- android的广播broadcast和receiver && 广播接收器优先级的深入分析
- android的广播broadcast和receiver && 广播接收器优先级的深入分析
- 广播接受者(Broadcast Receiver)
- matlab小波分析工具箱常用函数
- RMAN恢复目录(Recovery Catalog)
- Specular Reflection Models
- Vm虚拟机中Linux扩展磁盘空间
- STL系列之五 priority_queue 优先级队列
- 广播接收器—Broadcast Receiver(一)
- “马航客机失联”请多点克制少点猜想!
- http://www.regular-expressions.info/gnu.html
- mfc-菜单-学习笔记
- linux/videodev.h:没有那个文件或目录
- chrome浏览器频繁崩溃
- Linux编程环境搭建(codeblocks)
- HDOJ1205 吃糖果
- vs2012上Opticks源代码编译方法