Android 自动填写短信验证码 两种实现(二)

使用内容观察者

1. 创建一个内容观察者

public class MyContentObserver extends ContentObserver {

    private Handler mHandler;//更新ui线程
    private Activity mActivity;//上下文
    /**
     * Creates a content observer.
     *
     * @param handler The handler to run {@link #onChange} on, or null if none.
     */
    public MyContentObserver(Handler handler,Activity activity) {
        super(handler);
        this.mHandler=handler;
        this.mActivity=activity;
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);




        //数据库发生改变时调用
        Uri uri= Uri.parse("content://sms/");
        //获取ContentResolver对象
        ContentResolver contentResolver=mActivity.getContentResolver();
        Cursor cursor = contentResolver.query(uri, new String[]{"address","body"}, null, null, null);
        if(cursor!=null) {
            cursor.moveToFirst();

            ContentValues values = new ContentValues();
            values.put("read", "1");        //修改短信为已读模式

            String address=cursor.getString(0);
            String body=cursor.getString(1);

            Pattern pattern=Pattern.compile("(\\d{6})");
            Matcher matcher=pattern.matcher(body);
            if(matcher.find()){
                String code=matcher.group(0);
                Toast.makeText(mActivity, "验证码:"+code, Toast.LENGTH_SHORT).show();
                mHandler.obtainMessage(1,code).sendToTarget();
            }
            cursor.close();//关闭游标
            mActivity.getContentResolver().unregisterContentObserver(this);//注销内容观察者

        }
    }
}

2. 在MainActivity 中注册内容观察者

public class MainActivity extends AppCompatActivity {
    private TextView mTvContent;
    private ContentResolver mContentResolver;

    private Handler mHandler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(msg.what==1){
                String string= (String) msg.obj;
                mTvContent.setText(string);
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mTvContent= (TextView) findViewById(R.id.content);
        mContentResolver=getContentResolver();
        Uri uri= Uri.parse("content://sms/");
        //注册内容观察者
        mContentResolver.registerContentObserver(uri,true,new MyContentObserver(mHandler,this) );
    }

}

3 权限

 <uses-permission android:name="android.permission.READ_SMS"/>

4 Demo

链接:http://pan.baidu.com/s/1o7JrM8i 密码:apa2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值