我需要能够在 Android 中选择多个联系人。流程是这样的:
- 用户单击打开联系人应用程序的按钮。
- 但是,我需要能够选择多个联系人(在同一启动意图中),而不是能够选择单个联系人。
- 如果一个联系人有多个电话号码,我需要用户能够选择他想要选择的电话号码。
当我在消息应用程序中单击“联系人”时,此功能已经存在于我的三星 Android 手机(运行 2.3 Gingerbread)中。见下面的截图:
我需要能够在 Android 中选择多个联系人。流程是这样的:
当我在消息应用程序中单击“联系人”时,此功能已经存在于我的三星 Android 手机(运行 2.3 Gingerbread)中。见下面的截图:
没有内置的方法可以做到这一点,因此您需要自己完成大部分工作。幸运的是,这并不难。
展示
要显示您的联系人,您可以使用具有多选模式的列表视图,也可以创建自定义适配器并将其绑定到常规列表视图。我认为具有多选功能的列表视图不会让您为每一行放置除文本之外的任何内容,但您必须深入挖掘才能找到答案。
我已经将自定义适配器方法用于非常相似的事情(除了多个电话号码部分)。这很容易做到,而且我发现自定义适配器从长远来看非常有用。
通过自定义适配器设置,您可以创建包含个人所有信息的数据对象,包括他们的姓名和电话号码。在自定义适配器的 getView 中,您可以决定显示每条信息的内容/方式和位置。
收集信息
您需要使用 ContactContract API 来获取联系人信息。
你将不得不自己写这一切。您可以使用ContactsContract
提供程序查询所有带有电话号码的联系人,然后对于选定的联系人,您可以查询该联系人的所有电话号码。您可以根据需要在活动或对话框中显示结果。
不幸的是,并非所有版本的 android 都支持此代码
我知道这有点晚了,但想分享这个!我在网上找到了一些不完整的代码,在用它破解后我终于找到了答案!基本上你启动选择器并让它返回额外的数据=]
网上没有完整的答案,所以希望它对那里的一些人有所帮助!
享受:
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();
}