有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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);

这会将“米老鼠”放在名字字段中。我需要“米奇”作为名字,而“鼠标”作为姓氏。我的应用程序需要在Android 2.1(API 7级)上运行


共 (1) 个答案

  1. # 1 楼答案

    不幸的是,AOSP中的stock“Add Contact”活动似乎只支持要提供的全名(参见^{}^{}的源代码)

    一种方法是直接将联系人信息插入提供商,然后启动“编辑联系人”活动,如下所示:

    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);
    }
    

    与“添加”方法相比,使用这种“插入并编辑”机制的一个显著区别是,如果已经存在具有匹配数据的现有联系人,则提供商中的聚合过程更有可能阻止我们创建新联系人