我想显示预先填充姓氏的“添加联系人”活动(也称为“姓氏”和“姓氏”)。目前我只能填写第一个名字。这是我的代码:
Intent intentAddContact = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
intentAddContact.putExtra(ContactsContract.Intents.Insert.NAME, "Mickey Mouse");
intentAddContact.putExtra(ContactsContract.Intents.Insert.PHONE,"01234567891");
intentAddContact.putExtra(ContactsContract.Intents.Insert.EMAIL, "mickey@disney.com");
startActivityForResult(intentAddContact, ADD_CONTACT_REQUEST);
这会将“米老鼠”放在名字字段中。我需要“Mickey”以名字命名,“Mouse”代表姓氏。我的应用需要在Android 2.1(API级别7)上运行。
答案 0 :(得分:4)
不幸的是,似乎股票"添加联系人" AOSP中的活动仅支持提供的全名(请参阅EditContactActivity.createContact()
和EntityModifier.parseExtras()
的源代码)。
一种近似您想要的方法是直接将联系信息插入提供商,然后启动"编辑联系人"活动如下:
private void enlistMickey() throws RemoteException, OperationApplicationException {
final ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ContentProviderOperation.Builder builder;
builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
builder.withValue(RawContacts.ACCOUNT_NAME, null);
builder.withValue(RawContacts.ACCOUNT_TYPE, null);
ops.add(builder.build());
builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
builder.withValueBackReference(StructuredName.RAW_CONTACT_ID, 0);
builder.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
builder.withValue(StructuredName.GIVEN_NAME, "Mickey");
builder.withValue(StructuredName.FAMILY_NAME, "Mouse");
ops.add(builder.build());
builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
builder.withValueBackReference(Phone.RAW_CONTACT_ID, 0);
builder.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
builder.withValue(Phone.NUMBER, "01234567891");
ops.add(builder.build());
builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
builder.withValueBackReference(Email.RAW_CONTACT_ID, 0);
builder.withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
builder.withValue(Email.DATA, "mickey@disney.com");
ops.add(builder.build());
final ContentResolver cr = getContentResolver();
final ContentProviderResult[] res = cr.applyBatch(ContactsContract.AUTHORITY, ops);
final Uri uri = ContactsContract.RawContacts.getContactLookupUri(cr, res[0].uri);
final Intent intent = new Intent();
intent.setAction(Intent.ACTION_EDIT);
intent.setData(uri);
startActivityForResult(intent, REQUEST_CODE);
}
使用此&#34;插入和编辑&#34;有一个值得注意的区别机制与&#34;添加&#34;方法是,如果已存在具有匹配数据的现有联系人,则提供者中的聚合过程将更有可能阻止我们创建新联系人。