Программно изменить имя / номер телефона контакта
Я пытаюсь программно изменить отображаемое имя контакта:
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})
Если вы еще не поняли это, дайте этому идти. Я обнаружил, что обновление контактов очень сложно получить правильные аргументы выбора.