仅在 android 中显示带有 EMAIL 地址的联系人
Posted
技术标签:
【中文标题】仅在 android 中显示带有 EMAIL 地址的联系人【英文标题】:Displaying contacts with EMAIL address only in android 【发布时间】:2013-03-01 00:41:11 【问题描述】:我正在尝试构建一个应用程序,其中必须向用户显示仅包含电子邮件地址的电话联系人。当用户单击我的应用程序中的编辑框时,必须显示仅包含电子邮件地址的电话联系人,之后用户选择一个联系人,该联系人的电子邮件地址必须发送回我的应用程序,我会在我的应用程序中进一步使用它。
//这是我在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 中遗漏了什么?请帮助。
谢谢!
【问题讨论】:
,您有解决上述问题的方法吗?我也遇到了同样的问题。如果我们使用以下解决方案,它将显示手机中的所有联系人。 【参考方案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 权限才能执行任何有意义的操作。
【讨论】:
【参考方案2】:将以下代码放入监听器中,希望对您有所帮助。
代码
Intent intent = new Intent(Intent.ACTION_PICK,Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);
【讨论】:
通过使用这个 sol 我们可以避免错误,但它不是完整的解决方案。以上是关于仅在 android 中显示带有 EMAIL 地址的联系人的主要内容,如果未能解决你的问题,请参考以下文章
带有 ArrayAdapter 的 ListView 未在 Android 11 上显示内容
ListFragment 仅在带有 ExpandableListadpater 的片段视图中显示第一项