2016-09-14 16 views
2

連絡先リストに複数の番号でプログラムによる連絡先を作成するにはどうすればよいですか?名前「nameContact」との二つの接点があるその後androidの2つ以上の電話番号の連絡先を作成する

createNewContact(context, "+12345", "nameContact"); 
    createNewContact(context, "+67890", "nameContact"); 

public static void createNewContact(Context ctx, String phone, String name, String note) { 
    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 
    int rawContactInsertIndex = ops.size(); 

    ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
      .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null) 
      .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).build()); 
    ops.add(ContentProviderOperation 
      .newInsert(ContactsContract.Data.CONTENT_URI) 
      .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex) 
      .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
      .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, 
        name) // Name of the person 
      .build()); 
    ops.add(ContentProviderOperation 
      .newInsert(ContactsContract.Data.CONTENT_URI) 
      .withValueBackReference(
        ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex) 
      .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
      .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone) // Number of the person 
      .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) 
      .build()); // Type of mobile number 


      ops.add(ContentProviderOperation 
      .newInsert(ContactsContract.Data.CONTENT_URI) 
      .withValueBackReference(
        ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex) 
      .withValue(ContactsContract.Data.MIMETYPE, 
        ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE) 
      .withValue(ContactsContract.CommonDataKinds.Note.NOTE, note) // note of the person 
         .build()); 

    try { 
     ContentProviderResult[] res =ctx.getContentResolver(). 
       applyBatch(ContactsContract.AUTHORITY, ops); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 

、プログラムに私が書く:私は次のコードを試してみてください。しかし、私は "+12345"と "+67890"の2つの数字で1つの連絡先 "nameContact"を作成する必要があります。

+0

電話の配列を挿入しないのはなぜ?連絡先の名前に頼ることはできません。後で電話を追加する場合は、連絡先IDまたはURIが必要になります。たとえば、連絡先とやりとりした電話機に複数のアカウントを持っている場合、アカウントを持っているのと同じ名前の連絡先がたくさんあります。 –

+0

配列番号[] = {"+12345"、 "+67890"}を挿入すると、コードはwithValue(ContactsContract.CommonDataKinds.Phone.NUMBER、numbers)のように見えますが、例外が発生します。IllegalArgumentException:不正な値の型:[Ljava.lang.String; –

答えて

1

私がテストする時間を持っていないが、私はこのことについて考えていた:

public static void createNewContact(Context ctx, ArrayList<String> phones, String name, String note) { 

.... 

for (String phone : phones) { 
    ops.add(ContentProviderOperation 
      .newInsert(ContactsContract.Data.CONTENT_URI) 
      .withValueBackReference(
        ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex) 
      .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) 
      .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone) // Number of the person 
      .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) 
      .build()); // Type of mobile number 
} 

....

+0

ありがとう、それは動作します! –

関連する問題