介绍
本篇文章为大家展示了怎么在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中实现自动填写短信验证码