可以轻松打开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;
// ...
}
但是是否可以设置一些过滤条件,以便联系人应用程序只显示那些具有指定元素的联系人 - 例如完整的邮政信息,或适当的电子邮件,或电话号码?
我的应用需要邮政信息,目前实施的工作流程如下:
由于许多联系人没有邮政信息,因此在大多数情况下会显示一个消息框“抱歉没有可用于此联系人的邮政信息”。这不是一种可接受的行为。
另一个选择是 - 我只是实现这个 - 来查询应用程序内的联系人数据库并在我自己的代码中进行过滤,但使用这种方法有一些含义:
因此,为Contacts App设置一些标准似乎是一种更优雅的方式。
该应用应在Android 2.3.3及更高版本上运行。
问题:
答案 0 :(得分:4)
“联系人”应用注册到此意图过滤器
<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>
所以你可以这样创建你的意图:
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);
}