內容觀察者實現簡訊監聽 通過內容觀察者監聽簡訊是否發生變化,如果發生變化,就用內容提供者讀取簡訊的內容。 原理: 當簡訊發生變化(比如說來簡訊),簡訊應用就會通知內容觀察者我的簡訊發生了變化,並把變化位置簡訊的uri傳過來,有uri之後,內容提供者就可以很方便的讀取簡訊內容了,不過肯定要保證許可權夠。 ...
內容觀察者實現簡訊監聽
通過內容觀察者監聽簡訊是否發生變化,如果發生變化,就用內容提供者讀取簡訊的內容。
原理:
當簡訊發生變化(比如說來簡訊),簡訊應用就會通知內容觀察者我的簡訊發生了變化,並把變化位置簡訊的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); } }