打开 Android 联系人应用程序以显示所有联系人并选择其中一个很容易:
在活动中:
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;
// ...
}
但是是否可以设置一些过滤条件,以便联系人应用程序只显示那些具有指定元素的联系人 - 例如完整的邮政信息、正确的电子邮件或电话号码?
我的应用程序需要邮政信息,当前实现的工作流程是这样的:
- 用户点击按钮打开联系人
- 联系人应用程序启动,显示所有联系人
- 用户选择一个
- 回到我的活动中,检查了联系人
- 可用的邮政信息 -> 做正确的事
- 邮政信息不可用 -> 消息框
由于许多联系人没有邮政信息,因此在大多数情况下,会显示一个消息框“对不起,此联系人没有可用的邮政信息”。这不是可接受的行为。
一种替代方法是 - 我只是在实现这个 - 查询应用程序内的联系人数据库并在我自己的代码中进行过滤,但使用这种方法有一些含义:
- 该应用程序需要读取联系人权限,这对许多用户来说可能是不可行的
- 必须实现一个联系人选择器,它可能看起来与用户熟悉的不同
因此,为联系人应用程序设置一些标准似乎是一种更优雅的方式。
该应用程序应在 Android 2.3.3 及更高版本上运行。
问题:
- 在通过 startActivityForResult 启动联系人应用程序时,是否可以在 2.3.3 上为联系人应用程序设置过滤条件(尤其是诸如“has_postal_information”之类的东西)?
- 如果没有:是否可以在更高版本的操作系统上使用?