我正在尝试构建一个应用程序,其中只有电子邮件地址的电话联系人必须显示给用户。当用户点击我的应用程序中的编辑框时,只有电子邮件地址的电话联系人必须显示,之后用户选择一个联系人,该联系人的电子邮件地址必须发送回我的应用程序,我在我的应用程序中进一步使用它。
//这是我在onActivityResult()方法下的代码
try
{
Uri result = data.getData();
String id = result.getLastPathSegment();
cursor = getContentResolver().query(Email.CONTENT_URI, null, Email.CONTACT_ID + "=?", new String[] { id }, null);
emailIdx = cursor.getColumnIndex(Email.DATA);
if (cursor.moveToFirst())
{
while (cursor.isAfterLast() == false)
{
emailid = cursor.getString(emailIdx);
allids.add(emailid);
cursor.moveToNext();
}
}
else
{
//no results actions
}
}
//这是我传递的意图。
Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
intent.setType(ContactsContract.CommonDataKinds.Email.ADDRESS);
startActivityForResult(intent, 1);
//显示权限。
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<intent-filter>
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.dir/email_v2" />
<data android:mimeType="vnd.android.cursor.item/email_v2" />
</intent-filter>
当我尝试运行我的应用时,我收到以下错误。
android.content.ActivityNotFoundException: No Activity found to handle Intent {act=android.intent.action.PICK typ=data1 }
我不确定可能是什么问题,我在manifest.xml中遗漏了什么?。请帮助。
谢谢!
答案 0 :(得分:0)
现在这已经很老了,但如果我正在寻找它,我相信其他人也是如此,这是我的解决方案。意图如下:
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(ContactsContract.CommonDataKinds.Email.CONTENT_TYPE);
startActivityForResult(intent, RC_GET_EMAIL);
然后从挑选的联系人处获取电子邮件地址:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == RC_GET_EMAIL) {
if(resultCode == Activity.RESULT_OK) {
Uri contactUri = data.getData();
String[] projection = new String[]{ContactsContract.CommonDataKinds.Email.DATA};
Cursor cursor = getContext().getContentResolver().query(contactUri, projection, null, null, null);
if(cursor != null) {
if(cursor.moveToFirst()) {
int emailIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA);
String email = cursor.getString(emailIndex);
// do something with email
}
cursor.close();
}
}
}
}
请记住,对于Marshmallow及以上,您需要手动请求READ_CONTACTS权限才能执行任何有意义的操作。
答案 1 :(得分:-2)
将以下代码放在监听器中,希望这有帮助。
<强>代码强>
Intent intent = new Intent(Intent.ACTION_PICK,Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);