內容觀察者使用
1.使用ContentObserver監聽ContentProvider中資料的變化
2.(PPT中內容)
如果ContentProvider的訪問者需要知道ContentProvider中的資料發生了變化,可以在ContentProvider 發生資料變化時呼叫getContentResolver().notifyChange(uri, null)來通知註冊在此URI上的訪問者,例子如下:
public class PersonContentProvider extends ContentProvider {
public Uri insert(Uri uri, ContentValues values) {
db.insert("person", "personid", values);
getContext().getContentResolver().notifyChange(uri, null);
}
}
如果ContentProvider的訪問者需要得到資料變化通知,必須使用ContentObserver對資料(資料採用uri描述)進行監聽,當監聽到資料變化通知時,系統就會呼叫ContentObserver的onChange()方法:
getContentResolver().registerContentObserver(Uri.parse("content://cn.itcast.providers.personprovider/person"),
true, new PersonObserver(new Handler()));
public class PersonObserver extends ContentObserver{
public PersonObserver(Handler handler) {
super(handler);
}
public void onChange(boolean selfChange) {
//此處可以進行相應的業務處理
}
}
1. 監聽資料變化
2. 發件箱的uri: content://sms/outbox
3. 加許可權;
4. 一旦註冊內容觀察者,就算關閉應用也會存在手機中,除非解除安裝應用和程序被關掉
守護程序:一旦關閉程序,就另開一個,不斷迴圈;
監聽系統簡訊
觀察監聽自己定義的內容提供者;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 監聽系統簡訊 ContentResolver resolver = getContentResolver(); // 註冊一個內容觀察者觀察簡訊資料庫 resolver.registerContentObserver(Uri.parse("content://sms/"), true, new MyContentObserver(new Handler())); } /** * @author andong * 內容觀察者 */ class MyContentObserver extends ContentObserver { private static final String TAG = "MyContentObserver"; public MyContentObserver(Handler handler) { super(handler); } /** * 當被監聽的內容發生改變時回撥 */ @Override public void onChange(boolean selfChange) { Log.i(TAG, "簡訊改變了"); Uri uri = Uri.parse("content://sms/outbox"); // 發件箱的uri // 查詢發件箱的內容 Cursor cursor = getContentResolver().query(uri, new String[]{"address", "date", "body"}, null, null, null); if(cursor != null && cursor.getCount() > 0) { String address; long date; String body; while(cursor.moveToNext()) { address = cursor.getString(0); date = cursor.getLong(1); body = cursor.getString(2); Log.i(TAG, "號碼: " + address + ", 日期: " + date + ", 內容: " + body); } cursor.close(); } } } }
。。。。。。。。。。。。。。。。。