7

私はプログラムで連絡先の表示名を変更しようとしています:編集名前/電話番号をプログラム

 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

コードが細かい実行されますが、以前の活動で集まったContactsContract.CommonDataKinds.Phone._IDあります

  • ContentProviderResult[]結果がNULLです
  • 連絡先の名前は変更されませんed

私はData.DISPLAY_NAMEでも実験しましたが、同じ効果があります。

マニュアル:http://developer.android.com/guide/topics/providers/contacts-provider.htmlを読んでいますが、ネイティブインテントを呼びたくありません。

ありがとうございました。

+0

本当に?誰も助けることができない? – androfan

答えて

5

選択項目にmimetypeを指定する必要があります。

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

これをまだ把握していない場合は、それを実行してください。選択肢の引数を正しく取得するには、連絡先の更新が非常に難しいと感じました。

+0

私は以前、それを理解しました、それは手がかりでした。とにかくありがとう ;)。 – androfan

+0

@androfan答えが見つかった場合は、完全なコードを投稿してください。ありがとう:) –