Android 短信验证码自动填写

原创 2015年12月17日 09:09:42

       这个也不是什么新东西,目前很多app都有这个功能,最近有几个小伙伴问我是怎么实现的,索性写一篇博客来为大家解答。

       实现思路很简单:1、在需要输入验证码的Activity代码注册监听短信的广播 2、拦截短信,获取其中的验证码 3、回写到EditText

      

        private SmsReciver smsReciver = new SmsReciver();
        /** 收到短信Action **/
        String ACTION_SMS_RECIVER = "android.provider.Telephony.SMS_RECEIVED";
	/**
	 * 注册广播接受者监听短信验证码自动回写  可在onCreate()中进行注册;
	 */
	private void registSmsReciver() {
		IntentFilter filter = new IntentFilter();
		filter.addAction(ACTION_SMS_RECIVER);
  		// 设置优先级 不然监听不到短信 
 		filter.setPriority(1000);
		registerReceiver(smsReciver, filter);
    	}

          /**
	   * 短信广播接受者 用户监听短信,自动填写验证码
	   */
          private class SmsReciver extends BroadcastReceiver {

   		@Override
 		public void onReceive(Context context, Intent intent) {
  			Object[] objs = (Object[]) intent.getExtras().get("pdus");
			  for (Object obj : objs) {
				  yte[] pdu = (byte[]) obj;
 				 SmsMessage sms = SmsMessage.createFromPdu(pdu);
 				 // 短信的内容
				 String message = sms.getMessageBody();
  				 Log.d("log", "message     " + message);
				// 短息的手机号,如果你们公司发送验证码的号码是固定的这里可以进行一个号码的校验
				 String from = sms.getOriginatingAddress();
  				 Log.d("log", "from     " + from);
				 analysisVerify(message);

 			}
		 }

 	}

	 /**
 	 * 解析短信并且回写  这里解析的是纯数字的短信,如果小伙伴的验证码包含字母的话,可用正则替换
	  * 
	  * @param message
	  */
	private void analysisVerify(String message) {
		char[] msgs = message.toCharArray();
		 StringBuffer sb = new StringBuffer();
		for (int i = 0; i < msgs.length; i++) {
			if ('0' <= msgs[i] && msgs[i] <= '9') {
                            sb.append(msgs[i]);
			}
		}

 		mEtVerifyCode.setText(sb.toString());
	 }

 	@Override
	protected void onDestroy() {
		super.onDestroy();
		// 取消短信广播注册
		if (smsReciver != null) {
			unregisterReceiver(smsReciver);
			smsReciver = null;
		}
	}

可以看到代码逻辑比较简单,需要注意的有几点。我们这里用的代码注册广播,之所以不采取全局广播的形式原因有两天,在高版本的api,注册全局的短信监听会失效。而且就业务而言,我们监听短信只会在输入验证码的Activity里面才会用到,采用代码注册的形式,在当前Activity销毁的时候取消广播注册,更符合我们的预期,提高应用的性能。第二个需要注意的问题是优先级的问题
filter.setPriority(1000);
可以看到,我们这里把优先级设置成了最大。保证我们的应用能够尽可能的接受到短信。注意,我使用的是“尽可能”,也就是说我们不能保证短信自动填写一定能执行成功,有个小伙伴可能会问,我们不是把优先级设置成了最高了吗?为什么还不能保证了? 原因其实很简单,你能把监听短信的优先级设置成最大,同样的,其他的应用也能把短信监听的优先级设置成最大。比如说,你的手机安装有360安全卫士,把你们公司的验证码视为垃圾短信拦截了,这个时候短信拦截就失效了。

版权声明:转载请标注原文地址

相关文章推荐

android获取短信验证码并自动填写

参考资料如下,亲测很好用,哈哈: http://blog.csdn.net/kaloda2011/article/details/21032829代码如下: MainActivitypublic ...

Xposed获取微信用户名密码

参考文章:Xposed恶意插件 Android 安全专项-Xposed 劫持用户名密码实践0x00我在之前的文章中演示了一下如何通过Xposed获取用户名密码,那篇文章的例子是我自己写的,Monke...

十四、Android UiAutomator 获取系统信息

一、Build构建信息 1.build类: Build类提供了硬件厂商、编号、序列号、SDK版本等重要信息。 类名:android.os.Build 常量名 说明 BOARD 底层板名...

Android短信验证码自动填写

  • 2015年09月26日 15:25
  • 1.46MB
  • 下载

Android自动填写短信验证码

  • 2016年01月15日 13:11
  • 2.47MB
  • 下载

android 短信验证码自动填写的两种方式

实际应用开发中,会经常用到短信验证的功能,这个时候如果再让用户就查看短信.然后再回到界面进行短信的填写,难免有多少有些不方便,作为开发者.本着用户至上的原则我们也应该来实现验证码的自动填写功能,实现短...

Android短信验证码自动填写

  • 2015年11月20日 22:53
  • 8.74MB
  • 下载

android 短信验证码自动填写

android 短信验证码自动填写

Android——自动填写短信验证码

在许多的APP中会涉及到获取短信验证码的选项,如果支持验证码自动填写会帮用户节省一部分操作 下面介绍一种简单的接到短信自动获取验证码填写到验证码输入框的方法分下面几个步骤主要是利用观察者模式,向短信...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 短信验证码自动填写
举报原因:
原因补充:

(最多只允许输入30个字)