public class SmsObservable extends ContentObserver {
private static final String TAG = "SmsObservable";
private Context mContext;
private Handler handler;
/**
* Creates a content observer.
*
* @param handler The handler to run {@link #onChange} on, or null if none.
*/
public SmsObservable(Context mContext, Handler handler) {
super(handler);
this.mContext = mContext;
this.handler = handler;
}
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
Log.e(TAG, "uri :" + uri.toString());
if ("content://sms/raw".equals(uri.toString())) {
return;
}
Uri inboxUri = Uri.parse("content://sms/inbox");
Cursor cursor = mContext.getContentResolver().query(inboxUri, null, null, null, "date desc");
if (cursor != null) {
if (cursor.moveToFirst()) {
String address = cursor.getString(cursor.getColumnIndex("address"));
String body = cursor.getString(cursor.getColumnIndex("body"));
Log.e(TAG, "address :" + address + " body : " + body);
Pattern pattern = Pattern.compile("(\\d{6})");
Matcher matcher = pattern.matcher(body);
if (matcher.find()) {
String code = matcher.group(0);
Log.e(TAG, "匹配出来的code :" + code);
handler.obtainMessage(MainActivity.SEND_SMS,code).sendToTarget();
}
}
}
}
}
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private SmsObservable smsObservable;
public static final int SEND_SMS = 1;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
Log.e(TAG,".... msg :"+msg.obj);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
smsObservable = new SmsObservable(this,handler);
Uri uri = Uri.parse("content://sms");
/**
* 是否监听sms uri中的所有变化
*/
getContentResolver().registerContentObserver(uri,true,smsObservable);
}
@Override
protected void onDestroy() {
super.onDestroy();
getContentResolver().unregisterContentObserver(smsObservable);
}
}