標籤:android des style blog http java
1、一個應用通過ContentObserver來觀察自己所監聽的資料(某個特定的URI)是否發生了變化
2、ContentObserver放在Activity中。CotentProvider專門寫一個類
3、其實今天類比這麼一個情境。A應用通過原始應用的ContentProvider中提供的方法來操作原始應用的資料。
。在原始應用中註冊觀察者來更新。也可以在B應用中註冊觀察者來更新
其實,ContentObserver的使用是比較簡單的。主要有兩個步驟:
1)通過ContentProvider來修改資料時,加上以下那麼一行:
getContext().getContentResolver().notifyChange(uri, null);//通知觀察者內容已經改變了...
如:
@Overridepublic Uri insert(Uri uri, ContentValues values) {SQLiteDatabase db = helper.getWritableDatabase();switch (matcher.match(uri)) {case PERSON:long id = db.insert("person", "id", values);// 插入記錄,得到idgetContext().getContentResolver().notifyChange(uri, null);//通知觀察者內容已經改變了...return ContentUris.withAppendedId(uri, id);default:throw new RuntimeException("表明非法");}}
2)在需要擷取到資料變化的地方(如Activity中加上)
getContentResolver().registerContentObserver(uri, true, new MyContentObserver());
private class MyContentObserver extends ContentObserver{public MyContentObserver() {super(new Handler());}@Overridepublic void onChange(boolean selfChange) {ContentResolver resolver = getContentResolver();Uri uri = Uri.parse("content://com.example.provider/person");Cursor c = resolver.query(uri, null, null, null, "id DESC LIMIT 1");if(c.moveToNext()){//System.out.println(c.getString(1));Toast.makeText(getApplicationContext(), c.getString(1), 1).show();}}}
源碼下載: