我有一個應用程序,我希望將android聯繫人列表中的詳細信息發送到遠程服務器,以便用戶可以在線查看他的聯繫人。 爲此,我想通知遠程服務器在手機上對聯繫人列表進行的任何更改。內容觀察者onChange方法在光標更改後調用兩次
我已經在電話啓動時啓動的服務中的'ContactsContract.Contacts.CONTENT_URI'上設置了ContentObserver。
我有一些quiestions,第2個是偶然的,第三個是我主要關心的。
1:一旦我建立了一個在我的光標上註冊ContentObserver的服務,那麼這個觀察者是否只存在於服務中?我的意思是,如果服務被殺死,contentObserver是否繼續觀察?
2:我懷疑答案是否定的,但我仍然會問。是否有任何知道哪些聯繫人正在更新觸發我的contentObserver的onchange方法?目前我必須編譯手機上所有聯繫人的列表,並將它們發送到我的遠程服務器,只需發送正在更新的聯繫人的詳細信息就會更容易。
3:這是我的主要問題,當我對聯繫人列表進行更改時,onChange方法正在快速連續觸發兩次。 1次更換,2次電話。有沒有管理這個?
public class ContactService extends Service {
JSONArray contactList;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
Log.i("C2DM","content observers initialised");
super.onCreate();
//Call Log Content Provider observer
MyContentContactsObserver contactsObserver = new MyContentContactsObserver();
ContactService.this.getContentResolver().registerContentObserver (ContactsContract.Contacts.CONTENT_URI, true, contactsObserver);
}
private class MyContentContactsObserver extends ContentObserver {
public MyContentContactsObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.i("LOG","detected change in contacts: "+selfChange);
}
}
}
結果在2條快線在我的logcat:
detected change in contacts: false
detected change in contacts: false
+1,是否10000毫秒在所有情況下都可以正常工作,您是否從用戶那裏得到過任何反饋,謝謝? – 2012-09-03 17:45:20
我還沒有得到任何用戶對此的迴應。我不會說它的最佳實施方式,但它現在的工作狀況良好。它是我們必須實現的一種補丁。 – 2012-09-04 08:59:20
我更喜歡'currentTime = System.CurrentTimeMillis()''if(nextCallTime
Kobor42
2013-10-09 06:06:11