关闭

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

标签: android验证码短信自动填写ContentObs
103人阅读 评论(0) 收藏 举报
分类:

使用内容观察者

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:31758次
    • 积分:1034
    • 等级:
    • 排名:千里之外
    • 原创:70篇
    • 转载:21篇
    • 译文:0篇
    • 评论:7条
    Github
    最新评论