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

来源:互联网 发布:淘宝退货挣钱 编辑:程序博客网 时间:2024/06/07 03:27

  • 使用内容观察者
    • 创建一个内容观察者
    • 在MainActivity 中注册内容观察者
    • 权限
    • Demo

使用内容观察者

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
原创粉丝点击