BroadcastReceiver之系统的有序短信广播--手机验证码短信的自动填充
2015-01-16 17:59
435 查看
最近在使用手机的时候,发现一个有趣的功能,在一些需要手机短信验证码,进行身份验证时,发现发来的短信,自己就填充到了输入框,觉得这是个不错的功能,比较方便~所以,就研究下怎么实现。
一个验证码的填充框,一2个按钮,控制开启监听广播,和关闭,一个TextView显示监听广播状态是否开启
对于BroadcastReceiver,起先看到介绍说是什么全局的监听器呀,什么用于监听系统全局的广播消息,比较闹心,云里雾里的。后来,我把它和点击事件OnClickListener归为一类比较来理解,相当于一个特殊的点击事件。
1.代码指定:
SendBroadcast:发送Normal Broadcast
SendOrderedBroadcast:发送 Ordered Broadcast
Ordered Broadcast比较有意思,会根据预先声明的优先级依次接受Broadrcast,级数,范围:-1000~1000,级数越大优先级越高(设置方式:1.在<intent-filter.../>元素的android:priority属性设置。2.调用IntentFilter的setPriority方法进行设置)。前一个先收到广播的接收者,可以调用BroadcastReceiver的abortBroadcast()方法终止Broadcast,而后面的接受者将收不到,也可以通过setResultExtras(Bundle)方法将得到Broadcast后的处理结果存入到Broadcast,传给下一个接受者(下一个接受者可以通过getResultExtras(true)获取)。
监听手机短信的是系统的广播,是一个有序的广播,所以我在例子中得加上:
必须实现,onReceive这个方法,里面是对收到内容的处理,填充上就OK啦~附上源码。点击开始,发送短信:验证码:XXXX,就能自动填充上~\(≧▽≦)/~啦啦啦
点击打开链接下载
一、布局
我写了个例子,布局比较简单,就一个页面:一个验证码的填充框,一2个按钮,控制开启监听广播,和关闭,一个TextView显示监听广播状态是否开启
<EditText android:id="@+id/verification_code" android:layout_width="100dp" android:layout_height="wrap_content" android:layout_marginLeft="10dp" /> <Button android:id="@+id/start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开启" /> <Button android:id="@+id/stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="停止" /> <TextView android:id="@+id/isStart" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:text="已开启" android:textColor="#FF0000" android:visibility="gone" />
二、BroadcastReceiver的认识
整个功能的实现,其实还是比较简单的,其实就是监听系统的短信广播,然后进行处理。正好对BraodcastReceiver进行一次认识和整理。对于BroadcastReceiver,起先看到介绍说是什么全局的监听器呀,什么用于监听系统全局的广播消息,比较闹心,云里雾里的。后来,我把它和点击事件OnClickListener归为一类比较来理解,相当于一个特殊的点击事件。
1、注册
点击事件,不是得先setOnClickListener(OnClickListener l)注册,所以BroadcastReceiver,也得先注册,而且有2种方法:1.代码指定:
<span style="font-size:18px;">IntentFilter filter = new IntentFilter(); filter.addAction("android.provider.Telephony.SMS_RECEIVED"); registerReceiver(smsReceiver, filter);</span>2.在AndroidManifest.xml文件中配置:
<span style="font-size:18px;"> <receiver android:name=".smsReceiver" > <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver></span>我采用了第一种,那么我写了一个类继承BroadcastReceiver,然后在代码中指定了这个类。
2、触发
当注册了点击事件后,触发的方式就是去点击这个组件,那么BroadcastReceiver的触发方式,就是发送一个广播,广播分为2种:一种是普通的广播,一种是有序的广播,针对这两种广播,发送的方式不一样SendBroadcast:发送Normal Broadcast
SendOrderedBroadcast:发送 Ordered Broadcast
Ordered Broadcast比较有意思,会根据预先声明的优先级依次接受Broadrcast,级数,范围:-1000~1000,级数越大优先级越高(设置方式:1.在<intent-filter.../>元素的android:priority属性设置。2.调用IntentFilter的setPriority方法进行设置)。前一个先收到广播的接收者,可以调用BroadcastReceiver的abortBroadcast()方法终止Broadcast,而后面的接受者将收不到,也可以通过setResultExtras(Bundle)方法将得到Broadcast后的处理结果存入到Broadcast,传给下一个接受者(下一个接受者可以通过getResultExtras(true)获取)。
监听手机短信的是系统的广播,是一个有序的广播,所以我在例子中得加上:
filter.setPriority(800);
3、实现和处理
最后贴上BroadcastReceiver的实现public class SmsReceiver extends BroadcastReceiver { public static AutoFillListener autoFillListener; public void onReceive(Context context, Intent intent) { if (intent.getAction() .equals("android.provider.Telephony.SMS_RECEIVED")) // 如果收到系统的短信广播 { // 接收由SMS传过来的数据 StringBuilder sb = new StringBuilder(); Bundle bundle = intent.getExtras(); // 判断是否有数据 if (bundle != null) { // 通过pdus可以获得接收到的所有短信消息 Object[] pdus = (Object[]) bundle.get("pdus"); // 构建短信对象array,并依据收到的对象长度来创建array的大小 SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < pdus.length; i++) { messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); } // 将送来的短信合并自定义信息于StringBuilder当中 for (SmsMessage message : messages) { sb.append(message.getDisplayMessageBody()); } autoFillListener.autofill(sb.toString().substring(4, 8)); } } } public static interface AutoFillListener { public abstract void autofill(String code); }
必须实现,onReceive这个方法,里面是对收到内容的处理,填充上就OK啦~附上源码。点击开始,发送短信:验证码:XXXX,就能自动填充上~\(≧▽≦)/~啦啦啦
点击打开链接下载
相关文章推荐
- BroadcastReceiver普通广播、有序广播、拦截广播、本地广播、Sticky广播、系统广播
- BroadcastReceiver 广播 短信拦截
- 初学Android,BroadcastReceiver之有序广播(七十一)
- Fanwe 方维多语商城建站系统接入手机短信功能--支持注册验证、订单通知等
- Android 四大组件之BroadcastReceiver(发送有序无序广播)
- 短信验证码自动填充
- 四大组件之一 ----------- BroadcastReceiver (拦截短信并屏蔽系统的Notification .)
- Android之BroadcastReceiver 监听系统广播
- Fanwe 方维P2P系统接入手机短信功能--支持注册验证、资金变动提醒、投标提醒等
- Android BroadcastReceiver实例Demo(有序广播的发送)
- Android学习笔记(十二)BroadcastReceiver的有序广播和优先级
- android-BroadcastReceiver 通过终止广播 阻止用户收到短信
- Android系统常用广播接收者BroadcastReceiver
- Fanwe 方维P2P系统(3.0版本)接入手机短信功能--支持注册验证、资金变动提醒、投标提醒等
- Android之BroadcastReceiver 广播接受者(短信窃听实例)
- android-BroadcastReceiver 系统开机广播
- 广播事件处理broadcast receiver---系统启动完成提示
- Android学习篇章57-广播BroadcastReceiver短信监听
- Android(java)学习笔记176:BroadcastReceiver之 短信发送的广播接收者
- android-BroadcastReceiver 发送有序广播