ContactsContract.RawContacts.VERSION没有变化

时间:2016-07-02 14:45:18

标签: android android-contentprovider android-contacts android-authenticator android-contact-mimetype

我正在尝试收听通讯录的更改。所以我先尝试了一个联系人。我已通过我的应用ACCOUNT_TYPE注册了联系人。并试图只听取特定联系人的变化。每当联系人ContactsContract.RawContacts.VERSION发生变化时,应该增加,ContactsContract.RawContacts.DIRTY应该变为1.但是没有任何变化。我正在修改默认手机通讯录中的联系人。

以下是我如何注册联系

      ContactsManager.addContact(this,new MyContact("1000","961820018","sandwitch"));

addContact代码:

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

    }
}

这就是我用check VERSION

读取更改的方法
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");

    }

}

0 个答案:

没有答案