Android ContactsContract.RawContacts.VERSION未更改

Android ContactsContract.RawContacts.VERSION未更改,android,android-contentprovider,android-contacts,android-authenticator,android-contact-mimetype,Android,Android Contentprovider,Android Contacts,Android Authenticator,Android Contact Mimetype,我试着倾听联系人的变化。所以我先和一个联系人联系。我已使用我的应用程序帐户类型注册了联系人。试着只听那个特定接触的变化。当联系人contacts contract.raw contacts.VERSION发生更改时,应递增,并且contacts contract.raw contacts.DIRTY应变为1。但一切都没有改变。我正在修改默认电话联系人应用程序中的联系人 以下是我注册联系人的方式 ContactsManager.addContact(this,new MyContact

我试着倾听联系人的变化。所以我先和一个联系人联系。我已使用我的应用程序帐户类型注册了联系人。试着只听那个特定接触的变化。当联系人
contacts contract.raw contacts.VERSION
发生更改时,应递增,并且
contacts contract.raw contacts.DIRTY
应变为1。但一切都没有改变。我正在修改默认电话联系人应用程序中的联系人

以下是我注册联系人的方式

      ContactsManager.addContact(this,new MyContact("1000","961820018","sandwitch"));
添加联系人代码:

public static void addContact(Context context,MyContact contact){

    ContentResolver resolver = context.getContentResolver();
    boolean mHasAccount = isAlreadyRegistered(resolver, contact.Id);

    if(mHasAccount){
        Log.d("Contact already","there");
    } else {
        Log.d("new Contact","Adding");

        ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

        // insert account name and account type
        ops.add(ContentProviderOperation
                .newInsert(addCallerIsSyncAdapterParameter(ContactsContract.RawContacts.CONTENT_URI, true))
                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, Constants.ACCOUNT_NAME)
                .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, Constants.ACCOUNT_TYPE)
                .withValue(ContactsContract.RawContacts.AGGREGATION_MODE,
                        ContactsContract.RawContacts.AGGREGATION_MODE_DEFAULT)
                .build());

        // insert contact number
        ops.add(ContentProviderOperation
                .newInsert(addCallerIsSyncAdapterParameter(ContactsContract.Data.CONTENT_URI, true))
                .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
                .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.number)
                .build());

        // insert contact name
        ops.add(ContentProviderOperation
                .newInsert(addCallerIsSyncAdapterParameter(ContactsContract.Data.CONTENT_URI, true))
                .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
                .withValue(ContactsContract.Data.MIMETYPE,
                        ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
                .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, contact.name)
                .build());
        // insert mime-type data
        ops.add(ContentProviderOperation
                .newInsert(addCallerIsSyncAdapterParameter(ContactsContract.Data.CONTENT_URI, true))
                .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
                .withValue(ContactsContract.Data.MIMETYPE, MIMETYPE)
                .withValue(ContactsContract.Data.DATA1, 12345)
                .withValue(ContactsContract.Data.DATA2, "user")
                .withValue(ContactsContract.Data.DATA3, "MyData")
                .build());

        try {
            resolver.applyBatch(ContactsContract.AUTHORITY, ops);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

您是否检查了联系人数据库中的修改?id是否确实修改了您在帐户中创建的联系人记录?是。。是的。联系人发生了变化。我重新命名了它,并重新更改了号码。我可以打印已修改的帐户类型的名称和编号,但版本始终为4。
private void readUpdate(){

    Cursor cursor = mContentResolver.query(ContactsContract.RawContacts.CONTENT_URI,
            new String[]{ContactsContract.RawContacts.VERSION, ContactsContract.RawContacts.CONTACT_ID,ContactsContract.RawContacts.ACCOUNT_TYPE},
            ContactsContract.RawContacts.ACCOUNT_TYPE+"=? ",
            new String[]{String.valueOf(Constants.ACCOUNT_TYPE)},
            null);

    if (cursor != null && cursor.getCount() >0)
    {

        cursor.moveToFirst();
        while(!cursor.isAfterLast()){

            String id = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID));
            String version = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.VERSION));
            String type = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE));

            if(id!=null && dirty!=null&& type!=null){
                Log.d("Upadte version",version);
                Log.d("Update ACCountid",id);
                Log.d("Update type", type);
                Cursor cur = mContentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                        new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME},
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?",
                        new String[]{String.valueOf(id)},
                        null);
                if(cur!=null && cur.getCount()>0) {
                    cur.moveToFirst();
                    while(!cur.isAfterLast()){
                        String name = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                        String number = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                        Log.d("Update Name", name);
                        Log.d("Update Number", number);

                     /*   ContactsManager.updateContact(getContext(), id, name, number);
                        CV.clear();
                        CV.put(DBconstants.TableConstants.PHONE_NUMBER, number);
                        CV.put(DBconstants.TableConstants.C_CONTACT_NAME, name);
                        DB.updateInformation(DB, DBconstants.TableConstants.TABLE_CONTACTS, CV, DBconstants.TableConstants.C_ID, id);
                        CV.clear();
                    */    cur.moveToNext();

                    }
                    cur.close();
                }else{
                    Log.d("update", "nullinvalues");

                }


            }else{
                Log.d("update", "nullvalues");

            }

            cursor.moveToNext();
        }
        cursor.close();

    }else {
        Log.d("update", "nullcursor");

    }

}