解决短信接收自动填写输入框的问题

2015-12-27 11:16 阅读 3,271 次 评论 0 条
版权声明:本文著作权归TeachCourse所有,未经许可禁止转载,谢谢支持!
转载请注明出处:http://teachcourse.cn/1153.html

概要

短信验证码自动填写当前Activity,动态注册一个广播监听器,如果监听到短信验证码消息,把内容回填到EditText输入框中。

创建广播监听器SMSReceiver

SMSReceiver继承BroadcastReceiver,重写onReceiver()方法,将短信验证码回写到EditText中,关键代码

  1. private class SMSReceiver extends BroadcastReceiver {  
  2.         @Override  
  3.         public void onReceive(Context context, Intent intent) {  
  4.             // 从Intent中接受信息  
  5.             Object[] pdus = (Object[]) intent.getExtras().get("pdus");  
  6.             String content = null;  
  7.             Date date = null;  
  8.             String number = null;  
  9.             for (Object p : pdus) {  
  10.                 byte[] sms = (byte[]) p;  
  11.                   
  12.                 SmsMessage message = SmsMessage.createFromPdu(sms);  
  13.                 // 获取短信内容  
  14.                 content = message.getMessageBody();  
  15.                 // 获取发送时间  
  16.                 date = new Date(message.getTimestampMillis());  
  17.                 // 获取发件人号码  
  18.                 number = message.getOriginatingAddress();  
  19.   
  20.                 // 终止广播  
  21.                 abortBroadcast();  
  22.             }  
  23.             // 处理数据...  
  24.             mTextView.setText("内容=" + content + ";发件人号码=" + number + ";发送时间="  
  25.                     + date);  
  26.   
  27.         }  
  28.   
  29. }  

动态注册SMSReceiver

在需要监听的Activity中注册广播,动态监听将在Activity退出后结束,注册代码在onCreate方法中调用

  1. private void registerSMSReceiver() {  
  2.         IntentFilter mFilter = new IntentFilter();  
  3.         mFilter.addAction("android.provider.Telephony.SMS_RECEIVED");  
  4.         mFilter.setPriority(1000);// 设置广播监听器优先级1000,最大值  
  5.         SMSReceiver mReceiver = new SMSReceiver();  
  6.         registerReceiver(mReceiver, mFilter);  
  7.     }  

静态注册SMSReceiver

AndroidManifest.xml清单文件中注册广播,动态注册和静态注册的区别,可以参考《Android广播注册两者方式》

  1. <receiver android:name=".SMSBroadcastReceiver">  
  2.                <intent-filter android:priority="1000">  <!-- 设置优先级为最高 -->  
  3.                    <action android:name="android.provider.Telephony.SMS_RECEIVED"/>  
  4.                </intent-filter>  
  5. </receiver>  
关注公众号 扫一扫二维码,加我QQ

如果文章对你有帮助,欢迎点击上方按钮关注作者

来源:TeachCourse每周一次,深入学习Android教程,关注(QQ1589359239或公众号TeachCourse)
转载请注明出处:http://teachcourse.cn/1153.html
分类:Android 标签:
Android事件分发流程分析测试(2) Android事件分发流程分析测试(
Genymotion-eclipse-plugin插件安装 Genymotion-eclipse-plugin插件
关于刘翔妈妈我听闻的一件事,绝对不是个好伺候的婆婆 关于刘翔妈妈我听闻的一件事,绝
Android开发Service BroadcastReceiver Handler获取当前位置 Android开发Service Broadcas

发表评论

呲牙 憨笑 坏笑 偷笑 色 微笑 抓狂 睡觉 酷 流汗 鼓掌 大哭 可怜 疑问 晕 惊讶 得意 尴尬 发怒 奋斗 衰 骷髅 啤酒 吃饭 礼物 强 弱 握手 OK NO 勾引 拳头 差劲 爱你

表情