Редактировать имя / номер телефона контакта программно

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

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_idContactsContract.CommonDataKinds.Phone._ID собранный в предыдущем contact_id

Код выполняется отлично, но:

  • Результат ContentProviderResult[] равен нулю
  • Контактное имя остается неизменным

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

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

Благодарю.

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

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

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