如何使用Android 2.1中的姓氏字段预填充“添加联系人”活动?

时间:2011-11-17 15:31:21

标签: java android android-intent android-contacts android-activity

我想显示预先填充姓氏的“添加联系人”活动(也称为“姓氏”和“姓氏”)。目前我只能填写第一个名字。这是我的代码:

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)上运行。

1 个答案:

答案 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;方法是,如果已存在具有匹配数据的现有联系人,则提供者中的聚合过程将更有可能阻止我们创建新联系人。