此Intent打开联系人,其中包含仅包含地址信息的条目:
Intent getContactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI);
现在我尝试使用此模式来过滤包含eMail的联系人:
Intent getContactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Email.CONTENT_URI);
但是这个例外(没有action_pick意图左右)
我怎样才能做到这一点?
答案 0 :(得分:3)
目前您无法使用默认的通讯录应用:默认的通讯录应用注册此Intent过滤器(请参阅https://android.googlesource.com/platform/packages/apps/Contacts/+/master/AndroidManifest.xml#165中的第165行):
<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>
因此,它可以回复邮政地址ACTION_PICK
意图,但不能回复电子邮件地址ACTION_PICK
意图。
如果您要进行电子邮件地址选择,则需要创建自己的活动,该活动从联系人提供商处获取Cursor,该活动仅显示具有电子邮件地址的用户,并在ListView中显示该用户可以选择。
答案 1 :(得分:0)
试试这个:
public void readcontact(){
try {
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
intent.setType("vnd.android.cursor.dir/email");
startActivityForResult(intent, PICK_CONTACT);
} catch (Exception e) {
e.printStackTrace();
}
}