ユーザーが自分の連絡先をオンラインで確認できるように、Androidの連絡先リストの詳細をリモートサーバーに送信したいと考えているアプリがあります。これを行うには、電話で行われた変更を連絡先リストに変更したことをリモートサーバーに通知します。
電話の起動時に開始されるサービスから、「ContactsContract.Contacts.CONTENT_URI」にContentObserverを設定しました。
私にはいくつかの質問があります。最初の2つは偶発的なもので、3つ目は私の主な関心事です。
1:カーソルにContentObserverを登録するサービスを設定した後、そのオブザーバーはサービス内にのみ存在しますか?つまり、サービスが強制終了された場合、contentObserverは引き続き監視しますか?
2:答えはノーだと思いますが、とにかく聞いてみます。更新されている連絡先がcontentObserverのonchangeメソッドをトリガーしていることを知る方法はありますか?現在、電話上のすべての連絡先のリストを編集してリモートサーバーに送信する必要があります。更新されている連絡先の詳細を送信する方が、はるかに簡単です。
3:これが私の主な質問です。連絡先リストに変更を加えると、onChangeメソッドが2回続けて実行されます。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);
}
}
}
私のlogCatの2つのクイックラインで結果:
detected change in contacts: false
detected change in contacts: false