0

BroadcastReceiver連絡先が削除/更新された場合にリッスンするを実装したい。読んだのですContantObserverが、のようにアプリケーションのバックグラウンドでこれを実行する方法がわかりませんBroadcastReceiver

どうすればこれを実装できますか?ContantObserverアプリケーションのバックグラウンドで 実行する方法はありますか?

私はこのFAQに従いました。

4

2 に答える 2

0

ブロードキャストレシーバーを実装し、このレシーバーをターゲットにするonChange方法でブロードキャストを送信します。カスタムインテントとブロードキャストの使用については、これを参照してください。ContentObserver

于 2012-04-18T12:39:17.073 に答える
0

サービスを開始し、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);
}
}
于 2016-08-09T07:44:35.620 に答える