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短信验证码自动填写功能的实现

android应用经常会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,通常,用户收到短信需要最小化应用去查看短信再填入验证码,必然比较麻烦,因此有必要能够自动获得下发的短信...
  • u014343528
  • u014343528
  • 2016年03月15日 20:08
  • 3010

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

参考资料如下,亲测很好用,哈哈: http://blog.csdn.net/kaloda2011/article/details/21032829代码如下: MainActivitypublic ...
  • jane1229
  • jane1229
  • 2016年09月12日 17:11
  • 3371

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

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

Android提取短信中的验证码

现在用短信验证码来实现登录和注册功能已经越来越常见了。如果你想用户在收到短信验证码后,不需要再手动输入进去的话,而是自动填入,那么你就需要做些特殊处理了! 1.监听短信变化     首先需要的...
  • njweiyukun
  • njweiyukun
  • 2016年02月15日 23:46
  • 1603

android--监听短信实现短信验证码自动填充

android中短信验证码的自动填充
  • biaobiao1217
  • biaobiao1217
  • 2016年07月08日 14:51
  • 1201

Android 调用免费短信验证码sdk开发

最近一段时间工作上面事情比较少,就开始学习一点东西,也很长时间没有写博客,所以还是记录一下,方便自己以后需要使用的时候查找,也提供给需要的人。     开始正文     我们经常在一个app注册的时候...
  • u010153076
  • u010153076
  • 2016年11月23日 16:10
  • 2874

Android自动获取短信验证码

现在很多应用很多功能都需要通过发送短信验证码进行验证。然而每次读取短信还得退出应用进行读取会给用户造成一定的不便。因此让应用可以直接读取到短信验证码就很有必要。 刚好前些天在极客学院看到了一个关于自动...
  • dai_jiawei
  • dai_jiawei
  • 2015年10月26日 14:30
  • 1349

安卓ContentObserver模式获取短信用正则自动填充验证码

安卓开发采用观察者模式ContentObserver监听短信用正则获取短信验证码
  • yung7086
  • yung7086
  • 2014年05月17日 21:26
  • 13657

android自动获取短信验证码

好吧,标题党了~ 前言:android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码。 主要就是实时获取短信...
  • hunterno4
  • hunterno4
  • 2013年08月11日 15:36
  • 26197

Android获取短信验证码并自动填充的两种方式

有些项目为了方便客户操作,减去客户输入短信验证码的时间,会要求安卓app能够获取收到的短信验证码并自动填充到输入框。所以,我整理了安卓获取短信验证码并自动填充输入框的两种方法,而且正式在项目中使用并无...
  • dwj611
  • dwj611
  • 2017年04月13日 13:42
  • 1702
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 短信验证码自动填写
举报原因:
原因补充:

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