第七例:簡訊監控之內容觀察者
阿新 • • 發佈:2019-01-19
package demo.my.com.myapidemo.content; import android.app.Activity; import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.text.Editable; import android.util.Log; import android.widget.EditText; import demo.my.com.myapidemo.R; /** * Created by Hack on 2015/10/22. */ public class SmsContentObserver extends Activity { private static final String TAG = "apidemo"; private EditText editText; ContentObserver smsObserver; private Uri SMS_INBOX = Uri.parse("content://sms"); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); smsObserver = new SmsObserver(this, smsHandler); getContentResolver().registerContentObserver(SMS_INBOX, true, smsObserver); editText = (EditText) findViewById(R.id.edit_text); } public Handler smsHandler = new Handler() { //這裡可以進行回撥的操作 //TODO }; class SmsObserver extends ContentObserver { public SmsObserver(Context context, Handler handler) { super(handler); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); getSmsFromPhone(); } } //獲取手機簡訊內容 public void getSmsFromPhone() { ContentResolver cr = getContentResolver(); String[] projection = new String[]{"body","type"};//"_id", "address", "person",, "date", "type" String where = " date > " + (System.currentTimeMillis() - 10 * 1000); Cursor cur = cr.query(SMS_INBOX, projection, where, null, "date desc"); if (null == cur) return; if (cur.moveToNext()) { String body = cur.getString(cur.getColumnIndex("body")); String sms_type = cur.getString(cur.getColumnIndex("type")); if (body.indexOf("安卓") != -1 && sms_type.equals("1")) { //內容判斷 String res = body.substring(0, 4); Log.i(TAG, res); editText.setText(res); //將游標移動到字串最後 Editable ea = editText.getText(); editText.setSelection(ea.length()); } } } @Override protected void onStart() { super.onStart(); } @Override protected void onResume() { super.onResume(); } @Override protected void onDestroy() { super.onDestroy(); //這個時候就取消這個內容觀察者, getContentResolver().unregisterContentObserver(smsObserver); Log.i(TAG, "onDestroy"); } }
在Activity建立的時候,註冊內容觀察者,在銷燬的時候,取消內容觀察者。
應用所需要的許可權:
<uses-permission android:name="android.permission.READ_SMS" />
截圖:
監聽驗證碼
Telephony.Sms相關知識連結:
http://www.cnblogs.com/fengzhblog/p/3193973.html