Android自动获得短信验证码

2 篇文章 0 订阅
2 篇文章 0 订阅

Android自动获得短信验证码

1:<!--动态读取手机短信权限-->
<uses-permission android:name="android.permission.READ_SMS" />

2:编写内容观察者类,监听短信触发:
public class SmsObserver extends ContentObserver {
    private Context mContext;
    private Handler mHandler;
    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("DEBUG", "SMS has changed!");
        Log.e("DEBUG", uri.toString());
        String code = "";
        if (uri.toString().equals("content://sms/raw")) {
            return;
        }
        Uri inboxUri = Uri.parse("content://sms/inbox");
        Cursor c = mContext.getContentResolver().query(inboxUri, null, null, null, "date desc");
        if (c != null) {
            if (c.moveToFirst()) {
                String address = c.getString(c.getColumnIndex("address"));//获得发件人
                String body = c.getString(c.getColumnIndex("body"));//发件内容
                //即发送短信的号码
               if (!address.equals("10690067200453")) {
                    return;
                }
                Log.e("DEBUG", "发件人为:" + address + " " + "短信内容为:" + body);

                Pattern pattern = Pattern.compile("(\\d{6})");//通过正则表达式获得六位数验证码
                Matcher matcher = pattern.matcher(body);
                if (matcher.find()) {
                    code = matcher.group(0);
                    Log.e("DEBUG", "code is " + code);
                    //发送通过Register.MSG_RECEIVED_CODE发送code到实现类
                    mHandler.obtainMessage(Register.MSG_RECEIVED_CODE, code).sendToTarget();
                }
            }
            c.close();
        }
    }
}

3:实现类:
public class Register extends Activity {

    private EditText codeText;//验证码框
    public static final int MSG_RECEIVED_CODE = 1;

    private SmsObserver mObserver;
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == MSG_RECEIVED_CODE) {
                String code = (String)msg.obj;
                codeText.setText(code);
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        //动态获取短信验证码
        mObserver = new SmsObserver(Register.this, mHandler);
        Uri uri = Uri.parse("content://sms");
        getContentResolver().registerContentObserver(uri, true, mObserver);//注册短信内容观察者
}
@Override
protected void onPause() {
    super.onPause();
    getContentResolver().unregisterContentObserver(mObserver);//取消内容观察者注册
}

4:图片:
![短信验证码](http://img.blog.csdn.net/20151120222027525)


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值