1. 程式人生 > >第七例:簡訊監控之內容觀察者

第七例:簡訊監控之內容觀察者

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

相關推薦

no