2014-04-11 70 views
2

我使用下面的代码:添加联系人名称为Android

ArrayList<ContentValues> data = new ArrayList<ContentValues>(); 

     ContentValues name = new ContentValues(); 
     name.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); 
     name.put(StructuredName.GIVEN_NAME, "first name"); 
     name.put(StructuredName.FAMILY_NAME, "last name"); 
     data.add(name); 

     ContentValues row2 = new ContentValues(); 
     row2.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE); 
     row2.put(Email.TYPE, Email.TYPE_CUSTOM); 
     row2.put(Email.LABEL, "Green Bot"); 
     row2.put(Email.ADDRESS, "[email protected]"); 
     data.add(row2); 

     Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI); 
     intent.putParcelableArrayListExtra(Insert.DATA, data); 

     startActivity(intent); 

但是,只有电子邮件添加。名称字段设置为空。

更新: 同样的地址!

ContentValues address = new ContentValues(); 
     address.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE); 
     address.put(StructuredPostal.CITY, "Nasr City"); 
     address.put(StructuredPostal.COUNTRY, "Egypt"); 
     address.put(StructuredPostal.REGION, "Cairo"); 
     address.put(StructuredPostal.TYPE, StructuredPostal.TYPE_WORK); 
     data.add(address); 

电子邮件,电话号码,网站,IM和照片工作正常。

+0

我发布了一个此问题的错误报告:https://code.google.com/p/android/issues/detail?id=193804 –

回答

0

试试这个

//添加到地址

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

    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, 0) 
      .withValue(
        ContactsContract.Data.MIMETYPE, 
        ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
      .withValue(
        ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, 
        Name) 
      .withValue(
        ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, 
        FirstName) 
      .withValue(
        ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME, 
        LastName).build()); 

    try { 
     ContentProviderResult[] personid = getContentResolver().applyBatch(
       ContactsContract.AUTHORITY, ops); 
    } catch (RemoteException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (OperationApplicationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+0

我相信这需要添加联系人的权限,我不希望这样。我的解决方案不需要此权限,因为该活动对用户显示。此外,这并没有回答为什么名称不出现。 –

+0

是的,它需要添加contact.i希望上面的答案没有帮助的权限。 – Shini

0

最后我添加了额外的“额外对意图

Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI); 
intent.putParcelableArrayListExtra(Insert.DATA, data); 
intent.putExtra(Intents.Insert.POSTAL, "addrees"); 
intent.putExtra(Intents.Insert.NAME, "name"); 
startActivity(intent); 

它为我工作。仅用于添加名称,但我不能添加名字,姓氏等。

相关问题