gpt4 book ai didi

android - 使用过滤器打开联系人选择器

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:05:19 24 4
gpt4 key购买 nike

很容易打开 Android 联系人应用程序以显示所有联系人并选择其中一个:

在 Activity 中:

    private int PICK_CONTACT = 853456;

// ...

// open contact list
void openContactPicker() {
Intent it= new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
startActivityForResult(it, PICK_CONTACT);
}

// when back from intent: use pick result
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// ...
switch (requestCode) {
case PICK_CONTACT:
if (dataOk(data)) {
extractContactInfo(data);
} else {
showErrorMessage();
}
break;
// ...
}

但是是否可以设置一些过滤条件,以便联系人应用程序只显示那些具有指定元素的联系人 - 例如完整的邮政信息、正确的电子邮件或电话号码?

我的应用程序需要邮政信息,目前实现的工作流程是这样的:

  • 用户点击按钮打开联系人
  • 联系人应用启动,显示所有联系人
  • 用户选择一个
  • 回到我的 Activity 中,联系人已被检查
    • 可用的邮政信息 -> 做正确的事
    • 邮政信息不可用 -> 消息框

由于许多联系人没有邮政信息,在大多数情况下,将显示一个消息框“抱歉,此联系人没有可用的邮政信息”。这是 Not Acceptable 行为。

一种替代方法是——我只是在实现这个——查询应用程序内的联系人数据库并在我自己的代码中进行过滤,但使用这种方法有一些影响:

  • 该应用需要读取联系人权限,这对许多用户来说可能是行不通的
  • 必须实现一个联系人选择器,它可能看起来与用户熟悉的不同

因此,为联系人应用程序设置一些标准似乎是一种更优雅的方式。

该应用程序应在 Android 2.3.3 及更高版本上运行。

问题:

  1. 在通过 startActivityForResult 启动联系人应用程序时,是否可以在 2.3.3 上为联系人应用程序设置过滤条件(尤其是诸如“has_postal_information”之类的东西)?
  2. 如果不能:是否可以在更高版本的操作系统上使用?

最佳答案

通讯录应用注册到这个 intent 过滤器

<intent-filter>
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/contact" />
<data android:mimeType="vnd.android.cursor.dir/person" />
<data android:mimeType="vnd.android.cursor.dir/phone_v2" />
<data android:mimeType="vnd.android.cursor.dir/phone" />
<data android:mimeType="vnd.android.cursor.dir/postal-address_v2" />
<data android:mimeType="vnd.android.cursor.dir/postal-address" />
</intent-filter>

因此您可以像这样创建您的 Intent :

private int PICK_CONTACT = 853456;

// ...

// open contact list
void openContactPicker() {
Intent it= new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
it.setType("vnd.android.cursor.dir/postal-address");
startActivityForResult(it, PICK_CONTACT);
}

关于android - 使用过滤器打开联系人选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16252846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com