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);
}
}