通过Intent启动Contacts活动

时间:2016-01-25 14:16:27

标签: android

我想在Android中显示设备联系人活动。我不需要在自定义视图中显示的联系人列表。 以下代码使得无法处理活动的例外。

Intent i = new Intent(Intent.ACTION_PICK);
i.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
startActivity(i);

2 个答案:

答案 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);