Android - 如何通过我们的应用程序调用联系人屏幕

时间:2011-10-05 11:25:13

标签: android

如何通过我们的应用程序推送联系人应用程序并使用新的修改详细信息返回我们的应用程序。 有可能吗?

感谢。

3 个答案:

答案 0 :(得分:0)

从这里开始:How to call Android contacts list?

我不是100%确定您的问题应该问什么,但以下代码片段应该可以帮助您“拨打联系人列表功能,选择一个联系人,然后使用联系人姓名返回[您的]应用程序”。< / p>

此过程分为三个步骤。

1)权限

添加将联系人数据读取到应用程序清单的权限。

<uses-permission android:name="android.permission.READ_CONTACTS"/>

2)致电联系人选择

在您的Activity中,创建一个Intent,要求系统查找可以从Contacts URI中的项目执行PICK操作的Activity。

Intent intent = new Intent(Intent.ACTION_PICK, People.CONTENT_URI);

调用startActivityForResult,传入此Intent(以及此示例中的请求代码整数PICK_CONTACT)。这将导致Android在ACTION_PICK上启动已注册为支持People.CONTENT_URI的活动,然后在选择(或取消)时返回此活动。

startActivityForResult(intent, PICK_CONTACT);

3)听取结果

同样在您的活动中,覆盖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 =  managedQuery(contactData, null, null, null, null);
        if (c.moveToFirst()) {
          String name = c.getString(c.getColumnIndexOrThrow(People.NAME));
          // TODO Whatever you want to do with the selected contact name.
        }
      }
      break;
  }
}

答案 1 :(得分:0)

在您的清单中,您需要添加权限:

<uses-permission android:name="android.permission.READ_CONTACTS" />

接下来,在您的活动中,您将使用以下内容:

 ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
                null, null, null, null);
        if (cur.getCount() > 0) {
        while (cur.moveToNext()) {
            String id =  cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
            String name = cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

            }
    }

查询联系人并获取ID和名称。

答案 2 :(得分:0)

您可能希望向联系人发送ACTION_EDIT意图

Uri uri = Uri.parse(iduri);
i.setData(uri);
Intent i = new Intent(Intent.ACTION_EDIT);
i.setData(Uri.parse(ContactsContract.Contacts.CONTENT_LOOKUP_URI + "/" + id));
startActivityForResult(i, some_int_EDIT_CONTACT);

或更好

Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, read_id);
i.setData(contactUri);
startActivityForResult(i, some_int_EDIT_CONTACT);

假设您有联系人ID