介绍
这篇文章将为大家详细讲解有关Android如何实现自动填充短信验证码,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
具体内容如下
短信验证码是大部分软件里面都存在的功能,同时为了避免用户自己输入导致的繁琐操作,有一部分软件设计者将其设置成了自动填充的方式,方便用户操作那么这种方式是什么实现的呢。
利用广播接收器来拦截短信获取其中匹配的内容,提供回掉,将短信内容暴露到活动中实现自动填充
首先我们要实现一个广播接收器
package com.wquant.weilt.reciver; import java.util.regex.Matcher; import java.util.regex.Pattern; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Message; import android.telephony.SmsMessage; import android.text.TextUtils; import android.util.Log; public class  SmsReciver extends BroadcastReceiver  { ,private String patternCoder =,“(? & lt; ! \ \ d) \ \ d {6} (? ! \ \ d)“; ,@Override ,public void  onReceive (Context 上下文,Intent 意图),{//才能获取短信数据 对象[],才能objs =, (Object []), intent.getExtras () . get (“pdus"); for 才能;(Object obj : obj), { ,,byte [], pdu =, (byte []), obj; ,,//将字节数组封装成为smsmessage对象 ,,SmsMessage sms =, SmsMessage.createFromPdu (pdu); ,,//获得短短信内容 ,,String message =, sms.getMessageBody (); ,,Log.d(“短信内容,,,“信息:“,+,消息);//,,,短息的手机号. . + 86开头吗? ,,String 得到=,sms.getOriginatingAddress (); ,,Log.d(“短信来源“,,“得到:“,+,); ,,if (! TextUtils.isEmpty(从),{ ,,,String code =, patternCode(消息); ,,,if (! TextUtils.isEmpty(代码),{ ,,,,mMessageListener.onReceived(代码); ,,,} ,,} ,,} ,}/* * *,才能匹配短信中间的6个数字(验证码等) *,才能 *,才能@param patternContent *才能@return ,*/,private String  patternCode (String patternContent), { if 才能;(TextUtils.isEmpty (patternContent)), { ,,return 零; ,,} Pattern 才能;p =, Pattern.compile (patternCoder); Matcher 才能;Matcher =, p.matcher (patternContent); if 才能;(matcher.find ()), { ,,return matcher.group (); ,,} return 才能;零; ,} ,//回调接口 ,public interface MessageListener  { public 才能;void  onReceived (String 消息); ,} ,MessageListener mMessageListener; ,public void  setOnReceivedMessageListener (MessageListener messageListener), { 时间=this.mMessageListener 才能;messageListener; ,} }
好上面我们已经实现了广播接收器,在活动中我们要绑定一个意图过滤器并将此广播注册在毁坏方法中要将其解除注册
package com.wquant.weilt.controler; import org.apache.http.Header; import org.json.JSONException; import org.json.JSONObject; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.os.CountDownTimer; import android.view.KeyEvent; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.loopj.android.http.RequestParams; import com.wquant.weilt.MyApplication; import com.wquant.weilt.R; import com.wquant.weilt.control.base.JsonHttpResponseHandlerBase; import com.wquant.weilt.control.base.MyBaseActivity; import com.wquant.weilt.reciver.SmsReciver; import com.wquant.weilt.reciver.SmsReciver.MessageListener; import com.wquant.weilt.util.CToast; import com.wquant.weilt.util.CommonUtil; import com.wquant.weilt.util.Constant; import com.wquant.weilt.util.HttpUtil;/* * ,*修改密码 *大敌; ,* @author zhaomy *大敌; ,*/public class  RestartLoginOrTradPwdActivity extends MyBaseActivity  { ,SmsReciver 行业; ,@Override ,protected void  onCreate (Bundle savedInstanceState), {//才能,TODO Auto-generated method 存根 super.onCreate才能(savedInstanceState); ,,setContentView (R.layout.activity_restart_login_or_trad); ,,init (); ,} ,private void  init (), { code 才能=,(EditText), findViewById (R.id.register_code); 行业才能=new SmsReciver (); IntentFilter 才能;filter =, new IntentFilter ();//才能,设置短信拦截参数 null null null null null null null null null null null null null null null null null null null null null nullAndroid如何实现自动填充短信验证码