相关疑难解决方法(0)

内容观察者onChange方法在光标1更改后调用两次

我有一个应用程序,我希望将Android联系人列表中的详细信息发送到远程服务器,以便用户可以在线查看他的联系人.为此,我想通知远程服务器手机上对联系人列表所做的任何更改.

我已经在启动手机时启动的服务中的"ContactsContract.Contacts.CONTENT_URI"上设置了一个ContentObserver.

我有一些静止,前两个是偶然的,第三个是我的主要关注点.

1:一旦我设置了一个在我的Cursor上注册ContentObserver的服务,该观察者是否只存在于服务中?我的意思是,如果服务被杀死,contentObserver会继续观察吗?

2:我怀疑答案是否定的,但无论如何我都会问.无论如何知道哪个联系人正在更新触发我的contentObserver的onchange方法?目前我必须编制手机上所有联系人的列表并将其发送到我的远程服务器,发送更新的联系人的详细信息会更容易.

3:这是我的主要问题,当我对我的联系人列表进行更改时,onChange方法会连续两次触发.1次更改,2次通话.无论如何管理这个?

    public class ContactService extends Service {

    JSONArray contactList;

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }

    @Override
    public void onCreate() {
        Log.i("C2DM","content observers initialised");
        super.onCreate();



        //Call Log Content Provider observer

        MyContentContactsObserver contactsObserver = new MyContentContactsObserver();
        ContactService.this.getContentResolver().registerContentObserver (ContactsContract.Contacts.CONTENT_URI, true, contactsObserver);   

    }

    private class MyContentContactsObserver extends ContentObserver {

        public MyContentContactsObserver() {
            super(null);
        }

        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);    
            Log.i("LOG","detected change in contacts: "+selfChange);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的logCat中有2个快速行:

 detected change in contacts: false 
 detected …
Run Code Online (Sandbox Code Playgroud)

java android android-contentprovider

17
推荐指数
3
解决办法
1万
查看次数

标签 统计

android ×1

android-contentprovider ×1

java ×1