Android获取和读取短信验证码的实现方法

2019-12-10 18:35:09王冬梅

 iv.添加相关的权限

 <uses-permission android:name="android.permission.READ_CONTACTS" />
 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.RECEIVE_SMS" />
 <uses-permission android:name="android.permission.GET_TASKS" />
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

 那么如何获取短信的相关内容呢?

2.如何获取刚收到的短信的相关内容.

 一般而言,短信的验证是以新短信的方式直接发送给用户的,那么应用程序如果想到读取刚收到的短息内容,就需要有相关的监听事件.我通过使用ContentObserver来实现的.通过使用这个类可以捕捉特定的uri使数据库改变,然后进而作一些相关的处理.

 那么我们就可以这样去实现,通过继承ContentObserver类,重写内部的onChange方法,设置特定的Uri,使得我们的类能够监听短信数据发生了变化这样我们的应用程序就知道什么时候短信到来了.那么短信到来之后,我们通过对短信内容的获取,然后读取内容中的验证码信息就可以了.

private class SmsObserver extends ContentObserver {

  public SmsObserver(Handler handler) {
   super(handler);
   // TODO Auto-generated constructor stub
  }
  /**
   *Uri.parse("content://sms/inbox")表示对收到的短信的一个监听的uri.
   */
  @Override
  public void onChange(boolean selfChange) {
   // TODO Auto-generated method stub
   StringBuilder sb = new StringBuilder();
   Cursor cursor = getContentResolver().query(
     Uri.parse("content://sms/inbox"), null, null, null, null);
      //这里不要使用while循环.我们只需要获取当前发送过来的短信数据就可以了.
   cursor.moveToNext();
   sb.append("body=" + cursor.getString(cursor.getColumnIndex("body"))); //获取短信内容的实体数据.
   Pattern pattern = Pattern.compile("[^0-9]"); //