怎么在Android中实现自动填写短信验证码

  介绍

本篇文章为大家展示了怎么在Android中实现自动填写短信验证码,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

<强> 1。布局的xml

& lt; LinearLayout  xmlns: android=癶ttp://schemas.android.com/apk/res/android"   ,android: layout_width=癿atch_parent"   ,android: layout_height=癿atch_parent"   ,android:取向=皏ertical"   ,比;      ,& lt; EditText    ,android: id=癅 + id/ed_smsVaild"   ,android: layout_width=癿atch_parent"   ,android: layout_height=皐rap_content"   ,android:提示=笆淙胙橹ぢ搿?比;   & lt;/LinearLayout>

2。MainActivity中主要就是注册和撤销内容观察者

public  class  MainActivity  extends  Activity  {      ,public  static  final  int  SMSCODE =, 1,;      ,SmsObserver  smsObserver;      editText, private  EditText ;/* *   ,*一个处理用于更新主ui中Edittext的   ,*/,private  Handler  mHandler =, new 处理程序(){   ,public  void  handleMessage (android.os.Message 味精),{      if 才能;(msg.what ==, SMSCODE), {   String 才能;codeString =,(字符串)msg.obj;   editText.setText才能(codeString);   ,,}      ,};   ,};      ,@Override   ,protected  void  onCreate (Bundle  savedInstanceState), {   ,super.onCreate (savedInstanceState);   ,setContentView (R.layout.activity_main);      EditText, editText =, (), findViewById (R.id.ed_smsVaild);   ,//创建内容观察者的对象=,,smsObserver  new  SmsObserver (mHandler MainActivity.this也);   ,//短信的uri为内容://sms   ,Uri  Uri =, Uri.parse(“内容://sms");   ,//注册内容观察者   ,this.getContentResolver () .registerContentObserver (uri,,真的,,smsObserver);   ,}/* *   ,*不用的时候将内容观察者手动撤销   ,*/,@Override   ,protected  void  onPause (), {   ,getContentResolver () .unregisterContentObserver (smsObserver);   ,}         }

<强> 3。最关键的内容观察者

public  class  SmsObserver  extends  ContentObserver {      ,private  Context  mContext;   ,private  Handler  mHandler;/* *   ,*实现构造方法,背景用于获得上下文,处理用于发送消息,便于更新ui   ,* @param 上下文   ,* @param 处理程序   ,*/,public  SmsObserver (Handler  Context 语境;处理程序){   ,超级(处理器);=,this.mContext 语境;=,this.mHandler 处理程序;   ,}/* *   ,*重写onchange()方法   ,*/,@Override   ,public  void  onChange (boolean  selfChange, Uri  uri), {      ,String  code =,““      ,Log.i (“Info",,“sms  has  changed");   ,Log.i (“Info", uri.toString ());/* *   *,才能当uri的内容为内容://短信/生时,这个短信是不存在数据库中的,   *,才能只有第二次的时候才写入数据库   ,*/,if  (uri.toString () .equals(“内容://短信/raw")), {   返回才能;   ,}   ,//收件箱的uri   ,Uri  inboxUri =, Uri.parse(“内容://短信/inbox");   ,//查询短信,按时间降序进行排序   ,Cursor  Cursor =, mContext.getContentResolver () .query (inboxUri,,空,空,,空,,“date  desc");   ,if  (cursor  !=, null), {   if 才能;(cursor.moveToFirst ()), {//读才能出发件人和短信内容   String 才能;address =, cursor.getString (cursor.getColumnIndex (“address"));   String 才能;body =, cursor.getString (cursor.getColumnIndex (“body"));   Log.i才能(“info",,“发件人为:“+ address  +“”+“短信内容为“+身体);//正才能则表达式d{6}的意思是连续6位是数字的就提取出来   Pattern 才能;Pattern =, Pattern.compile (“(\ \ d {6})“);//才能对短信的内容进行匹配   Matcher 才能;Matcher =, pattern.matcher(身体);   if 才能;(matcher.find ()), {   ,,code =, matcher.group (0);   ,,Log.i (“Info",,代码);   ,,//将代码发送到主线程   ,,Message  msMessage =, new 消息();   ,,msMessage.what =, MainActivity.SMSCODE;   ,,msMessage.obj =,代码;   ,,mHandler.sendMessage (msMessage);   ,,}   ,,}   cursor.close才能();      ,}   ,}      }

怎么在Android中实现自动填写短信验证码