使用内容观察者
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