我想在Android中显示设备联系人活动。我不需要在自定义视图中显示的联系人列表。 以下代码使得无法处理活动的例外。
Intent i = new Intent(Intent.ACTION_PICK);
i.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
startActivity(i);
答案 0 :(得分:1)
1)权限
添加将联系人数据读取到应用程序清单的权限。
2)致电联系人选择
在您的Activity中,创建一个Intent,要求系统查找可以从Contacts URI中的项目执行PICK操作的Activity。
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
调用startActivityForResult,传入此Intent(以及此示例中的请求代码整数,PICK_CONTACT)。这将导致Android在People.CONTENT_URI上启动已注册为支持ACTION_PICK的活动,然后在进行选择(或取消)时返回此活动。
startActivityForResult(intent, PICK_CONTACT);
3)听取结果
同样在您的Activity中,覆盖onActivityResult方法以侦听您在步骤2中启动的“选择联系人”活动的返回。您应该检查返回的请求代码是否与您期望的值匹配,并且结果代码是RESULT_OK。
您可以通过对数据Intent参数调用getData()来获取所选联系人的URI。要获取所选联系人的名称,您需要使用该URI创建新查询并从返回的游标中提取名称。
@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
switch (reqCode) {
case (PICK_CONTACT) :
if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();
Cursor c = getContentResolver().query(contactData, null, null, null, null);
if (c.moveToFirst()) {
String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
// TODO Whatever you want to do with the selected contact name.
}
}
break;
}
}
答案 1 :(得分:0)
您应该在AndroidManifest中添加READ_CONTACT
权限。
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
startActivityForResult(intent, 10011);