无法检索SMS显示名称

时间:2017-07-25 00:39:16

标签: android sms android-contacts

我一直在尝试检索短信息,但只是检索一切但是联系人的显示名称。 strDisplayName仅显示特定联系人的数值,而不显示名称本身。所有其他字符串版本的数据都会正确显示其相应的信息(除了" date")我尝试过从其他答案中获取显示名称的其他实现,但这样做会导致应用在尝试测试时崩溃。

    Uri smsData = Uri.parse("content://sms/" + folderName);
    String[] id = new String[]
            {
                    "_id", "person", "address",
                    "body", "date"
            };

    ContentResolver contentResolver = getContentResolver();
    Cursor smsCursor = contentResolver.query(smsData, null, null, null, null);

    // Retrieve index of data
    int indexContactID = smsCursor.getColumnIndex(id[0]);
    int indexDisplayName = smsCursor.getColumnIndex(id[1]);
    int indexPhoneNumber = smsCursor.getColumnIndex(id[2]);
    int indexMsg = smsCursor.getColumnIndex(id[3]);
    int indexDate = smsCursor.getColumnIndex(id[4]);

    if (indexMsg < 0 || !smsCursor.moveToFirst())
        return;

    mCustomAdapter.clear();

    while (smsCursor.moveToNext())
    {
        // Retrieve string version of data
        String strContactID = smsCursor.getString(indexContactID);
        String strDisplayName = smsCursor.getString(indexDisplayName);
        String strContactNumber = smsCursor.getString(indexPhoneNumber);
        String strMsg = smsCursor.getString(indexMsg);
        String strDate = smsCursor.getString(indexDate);

        String[] textMessage = new String[]
        {
                strContactID, strDisplayName, strContactNumber,
                strMsg, strDate
        };

        // Place collected data into custom adapter
        mCustomAdapter.add(textMessage);
    }
    smsCursor.close();

1 个答案:

答案 0 :(得分:0)

谁告诉你&#34;人&#34;是联系人的显示名称?

根据docs

  

PERSON

     

会话发件人的ID(如果有)。

这实际上是&#34; sender-id&#34;这绝不是联系人ID,因为短信可以通过联系人,非联系电话号码,非电话号码(如GOOGLEFACEBOOK)和包含的组发送两种或多种上述类型。

如果您想检查这是否是联系人,如果是,请获取联系人姓名,您需要通过两个步骤:

  1. 使用规范地址表在ID和电话号码(地址)之间进行转换。您可以为此RecipientIdCache
  2. 复制并使用Android的帮助程序类
  3. 如果地址是一个电话号码,请使用PHONE_LOOKUP表格查找该号码的联系人,这样会有所帮助:https://stackoverflow.com/a/7967182/819355