7

Próbuję zmodyfikować wyświetlaną nazwę kontaktu programowo:Edytuj nazwę/numer telefonu kontaktu programowo

 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 jest ContactsContract.CommonDataKinds.Phone._ID zebrane w dotychczasowej działalności

kod wykonuje dobrze, ale:

  • ContentProviderResult[] Wynik jest zerowy
  • Nazwa kontaktu pozostaje bez zmian ed

Eksperymentowałem również z Data.DISPLAY_NAME, ale z tym samym efektem.

Przeczytałem instrukcję: http://developer.android.com/guide/topics/providers/contacts-provider.html, ale nie chcę nazywać intencji natywnej.

Dzięki.

+0

Naprawdę? Nikt nie może pomóc? – androfan

Odpowiedz

5

Powinieneś podać typ MIME w swoim wyborze.

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

Jeśli jeszcze tego nie odkryłeś, daj sobie spokój. Zauważyłem, że aktualizowanie kontaktów jest bardzo trudne w doborze argumentów wyboru.

+0

Wymyśliłem to jakiś czas temu, to była wskazówka. Dzięki i tak;). – androfan

+0

@androfan Proszę napisać pełny kod, jeśli znalazłeś odpowiedź. Dzięki :) –