【问题标题】:Contact name retrieval returns "Skype video call"联系人姓名检索返回“Skype 视频通话”
【发布时间】:2017-02-12 21:14:08
【问题描述】:

我正在使用以下代码:

int indexContactId = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID);

/*......*/

 int id = Integer.parseInt(people.getString(indexContactId));
 Cursor name_cursor = ctx.getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, ContactsContract.Data.CONTACT_ID + "  = " + id, null, null);

 String first_name = "";
 String last_name = "";
 while (name_cursor.moveToNext()) {
     if (name_cursor.getString(name_cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME)) != null) {
         first_name = name_cursor.getString(name_cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME));
         last_name = name_cursor.getString(name_cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME));
    }
 }
 name_cursor.close();

获取联系人的名字和姓氏(分别)。

除此之外,我还在检索 DISPLAY_NAME

int indexName = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);

问题是对于某些联系人,我得到的值如下:

  • DISPLAY_NAME:弗兰克·米伦
  • FAMILY_NAME:0
  • GIVEN_NAME:Skype 视频 打电话

Skype 通话是怎么回事?以及如何检索正确的 MILEN 名称?或者至少知道忽略这些,因为 Franck MILEN 也返回了专有名称。

编辑

我需要的是一种更好的方法来获取用户的first_namelast_namephone_number(名字和姓氏应该分开),而不是获取或忽略 Skype 视频通话的事情 :)

【问题讨论】:

  • 你想达到什么目的?获取手机上所有联系人的显示名称?
  • 是的,还有电话号码。但我需要将名称分开,所以我将它们设置在带有粘性标题的列表中(标题是首字母)。我遇到的问题是我在列表中显示 DISPLAY_NAME ,但使用 GIVEN_NAME 的第一个字母作为标题的首字母。它在“S”下显示“Franck MILEN”:)
  • 总之需要每个联系人的display_name、given_name、phone_number?
  • 我需要 first_name、last_name、phone_number ... 并阻止它显示 Skype 内容 :)

标签: android


【解决方案1】:

看来我需要回答我自己的问题。这是我正在使用的代码,它似乎可以工作,它不再返回 Skype 联系人:

                int id = Integer.parseInt(people.getString(indexContactId));

            String[] projectionNames = new String[]{ContactsContract.Data.DATA2, ContactsContract.Data.DATA3};
            String where = ContactsContract.Data.CONTACT_ID + "  = " + id
                    + " AND "
                    + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE + "'";
            Uri uriNames = ContactsContract.Data.CONTENT_URI;

            Cursor name_cursor = ctx.getContentResolver().query(uriNames, projectionNames, where, null, null);

            String first_name = "";
            String last_name = "";
            while (name_cursor.moveToNext()) {
                first_name = name_cursor.getString(name_cursor.getColumnIndex(ContactsContract.Data.DATA2));
                last_name = name_cursor.getString(name_cursor.getColumnIndex(ContactsContract.Data.DATA3));
            }
            name_cursor.close();
            name_cursor = null;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多