1. 程式人生 > >內容觀察者實現短信監聽

內容觀察者實現短信監聽

view next() png ces alt 方法 dex pri cti

內容觀察者實現短信監聽

通過內容觀察者監聽短信是否發生變化,如果發生變化,就用內容提供者讀取短信的內容。

原理:

當短信發生變化(比如說來短信),短信應用就會通知內容觀察者我的短信發生了變化,並把變化位置短信的uri傳過來,有uri之後,內容提供者就可以很方便的讀取短信內容了,不過肯定要保證權限夠。

技術分享

package com.example.duanxinjianting;

import android.app.Activity;
import android.database.ContentObserver;
import android.database.Cursor;
import
android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends Activity { private MyObserver observer; @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); observer=new MyObserver(new Handler()); //註冊一個內容觀察者(觀察指定數據) Uri uri=Uri.parse("content://sms"); getContentResolver().registerContentObserver(uri,true,observer); } /** * 內容觀察者 * */ private class MyObserver extends ContentObserver{
public MyObserver(Handler handler) { super(handler); } /** * 當被觀察的數據發生變化,就回調此方法 * */ @Override public void onChange(boolean selfChange, Uri uri) { Log.d("bh",uri.toString()); Cursor cursor=getContentResolver().query(uri,null,null,null,null); while(cursor.moveToNext()){ int index=cursor.getColumnIndex("body"); String body=cursor.getString(index); Log.d("bh",body); } } } @Override protected void onDestroy() { super.onDestroy(); //卸載內容觀察者 getContentResolver().unregisterContentObserver(observer); } }

內容觀察者實現短信監聽