Программно изменить имя / номер телефона контакта

Я пытаюсь программно изменить отображаемое имя контакта:

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

        ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
        .withSelection(ContactsContract.CommonDataKinds.Phone._ID + " = ?", new String[] {contact_id})
        .withValue(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, "anything")
        .build());

        ContentProviderResult[] result = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
    } catch (Exception e) {
        Log.w("UpdateContact", e.getMessage()+"");
        for(StackTraceElement ste : e.getStackTrace()) {
            Log.w("UpdateContact", "t" + ste.toString());
        }
        Context ctx = getApplicationContext();
        int duration = Toast.LENGTH_SHORT;
        Toast toast = Toast.makeText(ctx, "Update failed", duration);
        toast.show();
    }

contact_id is ContactsContract.CommonDataKinds.Phone._ID собраны в предыдущей деятельности

код выполняется нормально, но:

  • ContentProviderResult[] результат будет null
  • имя контакта остается неизменной

Я также экспериментировал с Data.DISPLAY_NAME но с тем же эффектом.

Я прочитал инструкцию: http://developer.android.com/guide/topics/providers/contacts-provider.html но я не хочу называть родное намерение.

спасибо.

1 ответов


вы должны указать тип mimetype в своем выборе.

.withSelection(ContactsContract.CommonDataKinds.Phone._ID + "=? AND " +
               Data.MIMETYPE + "='" +
               ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'",
               new String[]{contact_id})

Если вы еще не поняли это, дайте этому идти. Я обнаружил, что обновление контактов очень сложно получить правильные аргументы выбора.