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