1

我正在尝试构建一个应用程序,其中必须向用户显示仅带有电子邮件地址的电话联系人。当用户单击我的应用程序中的编辑框时,在用户选择后,必须显示仅带有电子邮件地址的电话联系人联系人,该联系人的电子邮件地址必须发送回我的应用程序,我会在我的应用程序中进一步使用它。

//这是我在 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 中遗漏了什么?请帮忙。

谢谢!

4

2 回答 2

1

这现在已经很老了,但是如果我正在寻找它,我相信其他人也是如此,所以这是我的解决方案。Intent 的启动方式如下:

    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 权限才能执行任何有意义的操作。

于 2016-06-03T01:57:03.687 回答
-2

将下面的代码放在监听器中,希望对您有所帮助。

代码

Intent intent = new Intent(Intent.ACTION_PICK,Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);
于 2013-03-22T11:58:44.800 回答