当应用程序未运行时,获取有关Android中新联系人/更改联系人/删除联系人的通知

当应用程序未运行时,获取有关Android中新联系人/更改联系人/删除联系人的通知,android,notifications,contacts,observers,Android,Notifications,Contacts,Observers,如果在安卓系统中建立了新的或变更的联系人,有没有办法引起注意?如果有任何更改,我希望在应用程序启动时收到通知。在我看来,使用ContentObserver似乎意味着应用程序必须在活动中运行它。或者每次我都必须从数据库中加载所有联系人,并且我只能在我的应用程序运行且已实现ContentObserver时识别更改的联系人 我只能在我的应用程序运行并实现ContentObserver时识别更改的联系人 正确,至少通过安卓6.0 N Developer预览版有一个增强的JobScheduler,它为您实

如果在安卓系统中建立了新的或变更的联系人,有没有办法引起注意?如果有任何更改,我希望在应用程序启动时收到通知。在我看来,使用ContentObserver似乎意味着应用程序必须在活动中运行它。或者每次我都必须从数据库中加载所有联系人,并且我只能在我的应用程序运行且已实现ContentObserver时识别更改的联系人

我只能在我的应用程序运行并实现ContentObserver时识别更改的联系人

正确,至少通过安卓6.0


N Developer预览版有一个增强的
JobScheduler
,它为您实现一个
ContentObserver
,在检测到更改时调用您的
JobService
。除非出现问题,我们可以预期增强的
JobScheduler
将在下一版本的Android中发布,您可以选择在较新的Android设备上使用它。

好的,我现在做的是:使用后台服务并在onCreate()函数中建立ContentObservice。最后在清单中声明它。当然,如果应用程序完全关闭,它将不起作用,但如果它在后台。这对我来说已经足够了。它检测触点的变化。使用这种方法有什么缺点吗

这是服务:

public class ContactsChangeService extends IntentService {
/**
 * An IntentService must always have a constructor that calls the super constructor. The
 * string supplied to the super constructor is used to give a name to the IntentService's
 * background thread.
 */
public ContactsChangeService() {

    super("ContactsChangeReceiver");
}

@Override
public void onCreate() {
    super.onCreate();
    //if created make an Observer
    ContactsChangeObserver contentObserver = new ContactsChangeObserver();
    getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, contentObserver);
    Log.d(Constants.TAG, "[" + Constants.CONTACTS_OBSERVER_SERVICE + "] " + "started");
}

@Override
protected void onHandleIntent(Intent workIntent) {
    // Gets data from the incoming Intent
    String dataString = workIntent.getDataString();
    //...



    // Do work here, based on the contents of dataString
    //...
}
}

这是观察员:

public class ContactsChangeObserver extends ContentObserver{

    public ContactsChangeObserver() {
        super(null);
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        Log.d(Constants.TAG, "[" + Constants.CONTACTS_OBSERVER_SERVICE + "] " + "Change in Contacts detected");
    }
}

这是舱单条目:

        <service
        android:name=".service.ContactsChangeService"
        android:exported="true">
    </service>

有没有办法将广播接收器与服务一起使用?我从系统中搜索了一个意图,但没有找到适合更改联系人的内容?