【问题标题】:On Android, what is the correct way to open add new contact with a prefilled contact sheet?在 Android 上,使用预填充的联系表打开添加新联系人的正确方法是什么?
【发布时间】:2013-11-29 00:14:05
【问题描述】:

我想打开“保存新联系人”对话框,其中预先填写了街道地址、电话号码、电子邮件等。然后用户可以修改、添加或保存。

我见过一些方法。

1) 此方法已被弃用,但在大多数情况下都有效(无法使用复合类型,如地址)。

Intent i = new Intent(Intent.ACTION_INSERT_OR_EDIT);
                        i.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
                        i.putExtra(Insert.NAME,"Name");
                        i.putExtra(Insert.PHONE,"Number");
                        startActivity(i);

2) 这种方法似乎是一个很好的解决方案,但我无法将此数据附加到打开联系人应用程序的意图中。它仅用于以编程方式自动插入新联系人。

ArrayList<ContentProviderOperation> op=new ArrayList<ContentProviderOperation>();
                    /*  ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
                    .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, mSelectedAccount.getType()) 
                    .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, mSelectedAccount.getName()) 
            .build()); */
     op.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)
             .build());
     op.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
             .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
             .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
             .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,phone).build());

            getContentResolver().applyBatch(ContactsContract.AUTHORITY, op);

解决此问题的最佳做法是什么?

谢谢。

【问题讨论】:

  • “此方法已弃用”——真的吗?
  • 我从 IDE 收到此警告 此行的多个标记 - 字段 Contacts.Intents.Insert.NAME 已弃用 - 类型 Contacts.Intents.Insert 已弃用

标签: android android-intent android-contacts


【解决方案1】:

问题是您使用了错误的常量。您正在使用的 Insert.NAME 来自类

Contacts.Intents.Insert

在 API 级别 5 中已弃用。它已被替换为类

ContactsContract.Intents.Insert

如果你使用这个类的常量,你应该没问题!我已经相应地更新了您的代码:

Intent i = new Intent(Intent.ACTION_INSERT_OR_EDIT);
                        i.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
                        i.putExtra(ContactsContract.Intents.Insert.NAME,"Name");
                        i.putExtra(ContactsContract.Intents.Insert.PHONE,"Number");
                        startActivity(i);

您可以找到 ContactsContract.Intents.Insert 类 here 的文档以及有关使用意图修改联系人的一些一般信息 here

【讨论】:

  • Eclipse 抛出警告,告诉我 Insert.NAME 已被弃用 此行有多个标记 - 字段 Contacts.Intents.Insert.NAME 已弃用 - 类型 Contacts.Intents.Insert 已弃用
  • 啊,是的,我错了,这个类被替换为 ContactsContract。我将编辑我的答案。这是 ContactsContract 的文档:developer.android.com/reference/android/provider/…
  • @Joel:您正在混合和匹配ContactsContractContacts。删除对Contacts 的所有引用,将它们适当地更改为ContactsContract
猜你喜欢
  • 2012-02-27
  • 2012-08-12
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
相关资源
最近更新 更多