Dirty flag not getting set to “1” on contact update

拟墨画扇 提交于 2019-12-18 09:29:45

问题


I am working on a project in which I want to detect the changes in the Contacts. So I have created Account with Account manager and trying to find the changes in the contact list using DIRTY flag. But the DIRTY flag not getting set for my app account_type when contact updated. however DIRTY flag of another account_type(com.google) is getting set. Help me

This is how I am inserting contacts with my account and account_type.

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

    }
}

Code to check the changes in contact list

private void updateServer(){

    Log.d("Server", "updating");
    Cursor cursor = mContentResolver.query(ContactsContract.RawContacts.CONTENT_URI,
            new String[]{ContactsContract.RawContacts.DIRTY, ContactsContract.RawContacts.CONTACT_ID,ContactsContract.RawContacts.ACCOUNT_TYPE},
            ContactsContract.RawContacts.DIRTY+"=? ",
            new String[]{String.valueOf(1)},
            null);

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

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

            String id = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID));
            String dirty = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.DIRTY));
            String type = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE));

            if(id!=null && dirty!=null&& type!=null){
                Log.d("Upadte Dirty",dirty);
                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("Serverupdate", "nullinvalues");

                }


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

            }

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

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

    }

}

来源:https://stackoverflow.com/questions/38012627/dirty-flag-not-getting-set-to-1-on-contact-update

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!