自动填写获取的短信验证码

1. contentobserver类 短信监听功能的类
2.监听短信变化
3.提取短信验证码
正则表达式
4.将短信验证码设置到textview显示框中去

package com.example.androidsms;

import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.EditText;

public class MainActivity extends Activity {

 public static final int MSG_RECEIVER_CODE = 1;
 private Smsobserver mobserver;
 private EditText et;
 private Handler mhandler = new Handler() {
  public void handleMessage(Message msg) {
   //收到消息 更新UI   
   if (msg.what == MSG_RECEIVER_CODE) {
    String code = (String) msg.obj;
    et.setText(code);
   }
  };
 };

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  mobserver = new Smsobserver(MainActivity.this, null);
  // 获取uri
  Uri uri = Uri.parse("content://sms");
  // 绑定观察者
  getContentResolver().registerContentObserver(uri, true, mobserver);
  et = (EditText) findViewById(R.id.et);
 }

 @Override
 protected void onPause() {
  super.onPause();
  // 解除观察者
  getContentResolver().unregisterContentObserver(mobserver);
 }
}
------------------------------------------------------------------------------------------------------
package com.example.androidsms;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.util.Log;

public class Smsobserver extends ContentObserver {

 private Context mcontext;
 private Handler mhandler;
 private String code ="";
 
 public Smsobserver(Context context, Handler handler) {
  super(handler);
  mcontext = context;
  mhandler = handler;
 }

 @Override
 public void onChange(boolean selfChange, Uri uri) {
  super.onChange(selfChange, uri);
 
  Log.e("test", "sms is changed");
  Log.e("test", uri.toString());
  // 短信第一次改变时 不做任何处理
  if (uri.toString().equals("content://sms/raw")) {
   return;
  }
  // 读取短信箱中的uri
  Uri inboxuri = Uri.parse("content://sms/inbox");
  Cursor cursor = mcontext.getContentResolver().query(inboxuri, null,
    null, null, "date desc");
  if (cursor != null) {
   if (cursor.moveToFirst()) {
    String address = cursor.getString(cursor
      .getColumnIndex("address"));
    String body = cursor.getString(cursor.getColumnIndex("body"));
    // 正则表达式 提取连续的6个数字
    Pattern pattern = Pattern.compile("(\\d{6})");
    Matcher matcher = pattern.matcher(body);
    if (matcher.find()) {
     code = matcher.group(0);
     mhandler.obtainMessage(MainActivity.MSG_RECEIVER_CODE,code).sendToTarget();
    }
   }
   cursor.close();
  }
 }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值