我正在尝试更改特定的联系人(通过contactId),它的显示名称以编程方式。我在这里看过类似的问答,并尝试了以下方法:
public static boolean updateContactName(Context context, long contactId, String newName) {
    try {
        ContentResolver contentResolver  = context.getContentResolver();
        ArrayList<android.content.ContentProviderOperation> ops = new ArrayList<>();
        ops.add(android.content.ContentProviderOperation.newUpdate(android.provider.ContactsContract.Data.CONTENT_URI)
                .withSelection(ContactsContract.CommonDataKinds.Phone._ID + "=? AND " +
                                Data.MIMETYPE + "='" +
                                ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'",
                        new String[]{Long.toString(contactId)})
                .withValue(CommonDataKinds.StructuredName.DISPLAY_NAME, newName)
                .build());
        contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
        return true;
    } catch (Exception e) {
        CLog.d(ContactUtils.class, e);
        return false;
    }
}它在一些设备上工作,但在其他设备上(如LG G3),它不工作,没有任何更新。
谢谢你的帮助!
发布于 2017-09-19 21:17:02
请查看:
try {
    String newName = txtName.getText();
    ArrayList<ContentProviderOperation> cpoList = new ArrayList<ContentProviderOperation>();
    cpoList.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
    .withSelection(ContactsContract.CommonDataKinds.Phone._ID + "=? AND " +
           Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'", new String[]{contact_id})
    .withValue(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, newName)
    .build());
    ContentProviderResult[] result = getContentResolver().applyBatch(ContactsContract.AUTHORITY, cpoList);
} catch (Exception e) {
    // Do Any thing
}https://stackoverflow.com/questions/46300935
复制相似问题