連絡先データに変更が発生したとき(アドレス帳の連絡先に変更があった場合)を検出できる必要があります。アプリケーションに登録されたContentObserverは、アプリケーションが終了すると殺される
私はこのContentObserverを使用しています:
public class ContactsContentObserver extends ContentObserver {
private Context context;
private Handler toastMessageHandler;
public ContactsContentObserver(Handler handler, Context ctx) {
super(handler);
context = ctx;
}
@Override
public void onChange(boolean selfChange) {
this.onChange(selfChange,null);
}
@Override
public void onChange(boolean selfChange, Uri uri) {
// Change Detected! Do something.
}
}
私はこのようなサービスでは、このオブザーバを登録します。
@Override
public int onStartCommand (Intent intent, int flags, int startId){
super.onStartCommand(intent, flags, startId);
registerContactsContentObserver();
return START_STICKY;
}
private void registerContactsContentObserver(){
ContactsContentObserver myObserver = new ContactsContentObserver(new Handler(), this);
getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, myObserver);
}
私は私のメインの活動でこのサービスを開始します。
アクティビティが開いている限り(バックグラウンドであっても)、連絡先データを変更するたびにonChange()メソッドが呼び出されます。私は手動でアンドロイド
にrecent apps
からそれをクリアすることで、アプリを閉じた場合
しかし、それは全く動作しません。私が何か間違ったことをやっていますか?アプリが終了してもサービスが実行されないのですか?
フォアグラウンドでサービスを開始しようとしました – pskink
@ pskinkありがとうございます。フォアグラウンドでサービスを開始して問題を解決しました。私は答えを投稿しました。私はそれがなぜそのように機能するのか分からなかった。 –