在Android

时间:2018-06-06 16:42:47

标签: android

我创建了一个具有读/写联系人权限的应用程序。我正在尝试制作一个更新功能,使用此功能获取新的显示名称,电子邮件地址和电话号码:

public void updateContact(Context ctx, String name, String number, String email,String ContactId) {
    try {
        name = name.trim();
        email = email.trim();
        number = number.trim();

        ContentResolver contentResolver  = ctx.getContentResolver();

        String where = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";

        String[] emailParams = new String[]{ContactId, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE};
        String[] nameParams = new String[]{ContactId, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE};
        String[] numberParams = new String[]{ContactId, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE};

        ArrayList<android.content.ContentProviderOperation> ops = new ArrayList<android.content.ContentProviderOperation>();

        if(!email.equals(""))
        {
            ops.add(android.content.ContentProviderOperation.newUpdate(android.provider.ContactsContract.Data.CONTENT_URI)
                    .withSelection(where,emailParams)
                    .withValue(ContactsContract.CommonDataKinds.Email.DATA, email)
                    .build());
        }

        if(!name.equals(""))
        {
            ops.add(android.content.ContentProviderOperation.newUpdate(android.provider.ContactsContract.Data.CONTENT_URI)
                    .withSelection(where,nameParams)
                    .withValue(ContactsContract.Contacts.DISPLAY_NAME, name)
                    .build());
        }

        if(!number.equals(""))
        {

            ops.add(android.content.ContentProviderOperation.newUpdate(android.provider.ContactsContract.Data.CONTENT_URI)
                    .withSelection(where,numberParams)
                    .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, number)
                    .build());
        }
        contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);


    } catch (Exception e) {
        e.printStackTrace();
    }
}

可悲的是,这段代码没有对联系人进行任何更改,我很难找到原因。

感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

好吧,没人帮助我,但我自己管理。

对于遇到同样问题的任何人,我都会发布我自己问题的答案。

以下代码将更新电话,姓名和电子邮件的联系人。

    public static void updateContact(Context ctx, String name, String number, String email, Long id) {
    try {
        ContentValues contentValues;

        long ret = id;
        Log.i("contact id", ret + "");

        if (!name.equals("")) {
            contentValues = new ContentValues();
            contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, ret);
            contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
            contentValues.put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name);
            ctx.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, contentValues);
        }
        if (!number.equals("")) {
            contentValues = new ContentValues();
            contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, ret);
            contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
            contentValues.put(ContactsContract.CommonDataKinds.Phone.NUMBER, number);
            int phoneContactType = ContactsContract.CommonDataKinds.Phone.TYPE_HOME;
            contentValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, phoneContactType);
            ctx.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, contentValues);
        }
        if (!email.equals("")) {
            contentValues = new ContentValues();
            contentValues.put(ContactsContract.Data.RAW_CONTACT_ID, ret);
            contentValues.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
            contentValues.put(ContactsContract.CommonDataKinds.Email.ADDRESS, email);
            contentValues.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_CUSTOM);
            ctx.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, contentValues);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}