Android多个联系人选择器(可选择选择哪个电话号码)

时间:2012-05-04 13:06:12

标签: android android-intent android-2.2-froyo

我需要能够在Android中选择多个联系人。流程是这样的:

  1. 用户点击打开“联系人”应用程序的按钮。
  2. 但是,我需要能够选择多个联系人(在意图的同一启动中),而不是能够选择单个联系人。
  3. 如果联系人有多个电话号码,我需要用户能够选择他想要选择的电话号码。
  4. 当我点击Messaging应用程序中的“Contacts”时,我的Samsung Android手机(运行2.3 Gingerbread)中已经存在此功能。见下面的截图:

    enter image description here

    enter image description here

    enter image description here

3 个答案:

答案 0 :(得分:4)

没有内置的方法,所以你需要自己完成大部分工作。幸运的是,这并不难。

<强>显示

要显示联系人,您可以使用带有多选选择模式的列表视图,也可以创建自定义适配器并将其绑定到常规列表视图。我不会认为使用multi-select列表视图会让你为每行添加除文本之外的任何内容,但你必须深入挖掘才能找到。

我已经将自定义适配器方法用于非常相似的事情(除了多个电话号码部分)。这很容易做到,我发现自定义适配器从长远来看非常有用。

Custom Adapter Listview Tutorial

使用自定义适配器设置,您可以创建包含人员所有信息的数据对象,包括其姓名和电话号码。在自定义适配器的getView中,您可以决定显示每条信息的内容/方式和位置。

收集信息

您需要使用ContactContract API来获取联系人的信息。

Reading Contact Info

Reading ALL phone numbers for a Contact

答案 1 :(得分:0)

你必须自己写这些。您可以使用ContactsContract提供商查询具有电话号码的所有联系人,然后对于所选联系人,您可以查询该联系人的所有电话号码。您可以根据需要在活动或对话框中显示结果。

答案 2 :(得分:0)

很遗憾,所有Android版本都不支持此代码

我知道它有点晚了但是想分享一下! 我在网上发现了一些不完整的代码,在用它解开后我终于找到了答案! 基本上你启动选择器并让它返回extras =]

中的数据

网上没有完整的答案,所以希望它对那里的灵魂有所帮助!

享受:

    public void pickContact(View v){
    try {
        Intent phonebookIntent = new Intent("intent.action.INTERACTION_TOPMENU");
        phonebookIntent.putExtra("additional", "phone-multi");
        startActivityForResult(phonebookIntent, PICK_CONTACT); 
        // PICK_CONTACT IS JUST AN INT HOLDING SOME NUMBER OF YOUR CHOICE

    } catch (Exception e) {
        e.printStackTrace();
    }
}

public String getData(String contact, int which)
{
    return contact.split(";")[which];
}

public void onActivityResult(int reqCode, int resultCode, Intent data) {
    final int URI = 0;
    final int NUMBER = 1;

    if (RESULT_OK != resultCode) return;
    Bundle contactUri = data.getExtras();
    if (null == contactUri) return;

    ArrayList<String> contacts = (ArrayList<String>)contactUri.get("result");
    Toast.makeText(getApplicationContext(), getData(contacts.get(0),NUMBER), Toast.LENGTH_SHORT).show();
}