【问题标题】:Contact picker filtering联系人选择器过滤
【发布时间】:2012-01-13 14:15:44
【问题描述】:

我是这样使用联系人选择器的:

    Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
    this.startActivityForResult(intent, PICK_CONTACT_REQUEST);

我的问题是是否可以过滤联系人列表?例如,我只想查看联系人列表中至少有电话号码或电子邮件地址的那些联系人。

【问题讨论】:

    标签: android


    【解决方案1】:

    我建议对联系人使用您的自定义视图 - 这并不难,您可以根据需要自定义它。我个人以这种方式实现了您需要的功能。

    看这里:

    String PHONE_CONTACTS_ORDER_CLAUSE = ContactsContract.Contacts.DISPLAY_NAME
            + " ASC";
    
    List<PhoneContact> contacts = new ArrayList<PhoneContact>(); // I have defined the bean PhoneContact
    String[] projection = { ContactsContract.Contacts._ID,
            ContactsContract.Contacts.DISPLAY_NAME }; //Choose the columns you need
    Cursor cursor = this.getContentResolver().query(
            ContactsContract.Contacts.CONTENT_URI, projection, null/* the place for your where clause*/, null/* the place for your where args*/,
            PHONE_CONTACTS_ORDER_CLAUSE);
    startManagingCursor(cursor);
    
    int contactIdIdx = cursor.getColumnIndex(ContactsContract.Contacts._ID);
    int displayNameIdx = cursor
            .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
    while (cursor.moveToNext()) {
        PhoneContact contact = new PhoneContact(); // This is a class i defined, use the data the way you like.
        contact.setContactId(cursor.getString(contactIdIdx));
        contact.setDisplayName(cursor.getString(displayNameIdx));
        contacts.add(contact);
    }
    

    编辑 抱歉,在写评论时分心了:联系人 ID 实际上是联系人相关数据的不同内容提供者之间的粘合剂。您可以使用以下几个提供商来查看联系人是否有任何关联的电话或电子邮件:

    ContactsContract.CommonDataKinds.Phone.CONTENT_URI
    ContactsContract.CommonDataKinds.Email.CONTENT_URI
    

    【讨论】:

    • 这种方法的一个缺点是它需要READ_CONTACTS 权限才能查询联系人提供程序。
    • @tad:alternative 总是受欢迎的!
    • 如果您想坚持使用全局 Intent 而不添加权限,则没有绝对的选择。您一次只能使用Intent.setType(ContactsContract.CommonDataKinds.Email.CONTENT_TYPE)Intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE) 过滤一个属性。如果您不想添加READ_CONTACTS,请重新设计此交互以通过电话或电子邮件进行选择。
    • @Hades 缺少某些类或变量定义还是什么?这很奇怪,因为我记得我在 Gingerbread 上开发和测试过代码……
    • 对不起@BorisStrandjev 我犯了一个错误,它确实适用于姜饼,只是不能作为联系人选择器 URI..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 2017-05-10
    • 2011-09-02
    • 1970-01-01
    • 2013-01-16
    相关资源
    最近更新 更多