内容观察者实现短信监听
通过内容观察者监听短信是否发生变化,如果发生变化,就用内容提供者读取短信的内容。
原理:
当短信发生变化(比如说来短信),短信应用就会通知内容观察者我的短信发生了变化,并把变化位置短信的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); } }