【问题标题】:Unable to retrieve SMS display name无法检索 SMS 显示名称
【发布时间】:2017-12-30 17:15:54
【问题描述】:

我一直在尝试检索 SMS 信息,但只检索了除联系人显示名称之外的所有内容。 strDisplayName仅显示特定联系人的数值而不是姓名本身。所有其他字符串版本的数据都正确地显示了它们的相应信息(除了“日期”)我尝试了从其他答案中获取显示名称的其他实现,但这样做会导致应用在尝试测试时崩溃。

    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();

【问题讨论】:

    标签: android sms android-contacts


    【解决方案1】:

    谁告诉你“人”是联系人的显示名?

    根据docs

    对话发件人的 ID(如果存在)。

    这实际上是一个“sender-id”,这绝不是一个联系人 ID,因为可以从联系人、非联系人电话号码、非电话号码(如 GOOGLE 或 @ 987654325@) 并且来自包含上述两种或多种类型的组。

    如果你想检查这是否是一个联系人,如果是,获取联系人的名字,你需要通过两个步骤:

    1. 使用规范地址表在 id 和电话号码(地址)之间进行转换。你可以为这个RecipientIdCache复制和使用Android的帮助类
    2. 如果地址是单个电话号码,请使用PHONE_LOOKUP 表查找具有该号码的联系人,这将有所帮助:https://stackoverflow.com/a/7967182/819355

    【讨论】:

    • 我试过没有。 2 使用地址的字符串(甚至从数字中删除“+”),但应用程序仍然崩溃。
    • 堆栈跟踪是什么?它抱怨什么?
    • 另外,打印您要登录的地址,以确保您使用的是有效输入
    • 它在我的 MainActivity 中的 getContactDisplayNameByNumber 中抱怨 Cursor contactLookup
    • 你能在 www.pastebin.com 上发布完整的堆栈跟踪吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 2017-04-03
    • 2015-09-16
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    相关资源
    最近更新 更多