在App未运行时获取有关Android中新/已更改/已删除联系人的通知

时间:2016-03-14 18:54:34

标签: android notifications contacts observers

如果在Android中创建了新的或更改过的联系人,有没有办法引起注意?我想在应用程序启动时收到通知,如果有任何更改。在我看来,使用ContentObserver,应用程序必须在活动中运行它。或者我是否必须每次从我的数据库加载所有联系人,我只能识别我的应用程序运行时已更改的联系人并且已实施ContentObserver?

2 个答案:

答案 0 :(得分:0)

  

我只能识别我的应用运行时已更改的联系人并且已实施ContentObserver?

正确,至少通过Android 6.0。

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

答案 1 :(得分:-1)

好的,我现在做的是:使用后台服务并在onCreate()函数中构建ContentObservice。最后在清单中宣布它。如果应用程序完全关闭但是如果它在后台,它当然不起作用。对我而言足够了。它检测联系人的更改。使用这种方法有什么缺点吗?

这是服务:

public static ResourceBundle getBundle(String basePath, String baseName) throws MalformedURLException {
    File file = new File(basePath);
    URL[] urls = {file.toURI().toURL()};
    ClassLoader loader = new URLClassLoader(urls);
    ResourceBundle rb = ResourceBundle.getBundle(baseName, Locale.getDefault(), loader);
    return rb;
}   

}

这是观察者:

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");
    }