【问题标题】:How to know if contact / phonebook list or database is updated android?如何知道联系人/电话簿列表或数据库是否已更新 android?
【发布时间】:2015-03-03 10:24:10
【问题描述】:

我已经实现了一个同步适配器,它通过服务器发送我的所有联系人。 但是现在我面临的问题是,如果联系人列表已更新,系统如何响应。

我使用内容观察器来查找,但它似乎仅限于活动生命周期。

这是我的代码:

class MyObserver extends ContentObserver {
    public MyObserver(Handler handler) {
        super(handler);
    }

    @Override
    public void onChange(boolean selfChange) {
        this.onChange(selfChange, null);
    }

    @Override
    public void onChange(boolean selfChange, Uri uri) {

        Log.e("change   ", "contact");

    }
}

注册:

context.getContentResolver().registerContentObserver(
            Contacts.CONTENT_URI, false, new MyObserver(new Handler()));

没有任何广播可以通知它。

或者我必须为它提供服务。

【问题讨论】:

  • 你明白我的要求吗??你明白这个问题了吗?
  • 我的理解是你有一些数据,你想在数据变化时得到通知。您为此使用了 ContentObserver,但您想知道如何通知此 ContentObserver。如果这不是你的意思,我很抱歉,如果你改写问题会有所帮助。
  • 广播通知什么?你什么意思?
  • 无论应用程序如何,如何知道联系人是否已在安卓电话簿中添加或删除?

标签: android contacts android-contacts contentobserver


【解决方案1】:

为此,您必须按以下方式运行服务

public class ContactService extends Service {

MyObserver observer;
@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    getContentResolver().unregisterContentObserver(observer);
    super.onDestroy();
}

@Override
public void onCreate() {
    System.out.println("service created");
    observer=new MyObserver(new Handler());
    // TODO Auto-generated method stub
    getContentResolver().registerContentObserver(Contacts.CONTENT_URI, false, observer);
    super.onCreate();
}

@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}
}

然后您会在联系数据发生更改时通知您。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多