BroadcastReceiver
連絡先が削除/更新された場合にリッスンするを実装したい。読んだのですContantObserver
が、のようにアプリケーションのバックグラウンドでこれを実行する方法がわかりませんBroadcastReceiver
。
どうすればこれを実装できますか?ContantObserver
アプリケーションのバックグラウンドで 実行する方法はありますか?
私はこのFAQに従いました。
BroadcastReceiver
連絡先が削除/更新された場合にリッスンするを実装したい。読んだのですContantObserver
が、のようにアプリケーションのバックグラウンドでこれを実行する方法がわかりませんBroadcastReceiver
。
どうすればこれを実装できますか?ContantObserver
アプリケーションのバックグラウンドで 実行する方法はありますか?
私はこのFAQに従いました。
ブロードキャストレシーバーを実装し、このレシーバーをターゲットにするonChange
方法でブロードキャストを送信します。カスタムインテントとブロードキャストの使用については、これを参照してください。ContentObserver
サービスを開始し、ContentObserverをこのサーバーに登録します
これは、Contacts.CONTENT_URIの変更をリッスンし、ユーザーに通知するサンプルコードです。
これがサービスです
public class ContactObserverService extends Service implements ContactObserver.OnUpdate {
private ContactObserver contactObserver ;
public ContactObserverService() {
}
@Override
public void onCreate(){
super.onCreate();
contactObserver = new ContactObserver(this);
Toast.makeText(this,"Service Started",Toast.LENGTH_SHORT).show();
this.getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI,false,contactObserver);
}
@Override
public void onDestroy() {
if( contactObserver !=null )
{
this.getContentResolver().unregisterContentObserver(contactObserver);
}
super.onDestroy();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// The service is starting, due to a call to startService()
return START_STICKY;
}
@Override
public void onUpdate(Uri uri) {
NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
.setContentTitle("Contact Update Notifier")
.setContentText(uri.getQuery())
.setSmallIcon(R.drawable.images);
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
manager.notify(1,builder.build());
}
}
ContentObserverクラスは
public class ContactObserver extends ContentObserver {
private OnUpdate onUpdate;
public interface OnUpdate{
void onUpdate(Uri uri);
}
public ContactObserver(OnUpdate onUpdate) {
super(new Handler());
this.onUpdate = onUpdate;
}
@Override
public void onChange(boolean selfChange) {
this.onChange(selfChange, null);
}
@Override
public void onChange(boolean selfChange, Uri uri) {
// this is NOT UI thread, this is a BACKGROUND thread
uri.getQueryParameterNames();
onUpdate.onUpdate(uri);
}
}