我正在开发一个Cordova应用程序,它需要能够在一个群组文本中获得涉及的电话号码列表。我正在向content://mms/[id]/addr查询。我在Pixel2上测试,对于2018年3月10日之前的MMS信息,这个效果很好。但对于在该日期或之后的消息,它将失败(返回为空)。我应该查询其他地址吗?还有其他想法吗?

最佳答案

以下是aosp(android开源项目)的消息应用程序是如何做到的:
每条消息(sms/mms)在各自的表中都有一个表示为_ID的消息id
用这个id为相应的消息拉线程
threads表有一个名为recipient_ids的列,这可能是组消息的空格分隔,如下所示:
123 456 789号
其中123456等是收件人id。
获取相应收件人ID的地址。现在这有点棘手,但是aosp使用以下uri:content://mms-sms/canonical-address
因此,获取地址数组的最终方法如下所示:

private fun getAddressFromRecipientId(spaceSepIds: String, context: Context): Array<String?> {
    val singleCanonicalAddressUri = Uri.parse("content://mms-sms/canonical-address")
    with(spaceSepIds.split(" ")) {
    val addressArray: Array<String?> = arrayOfNulls(this.size)
        this.forEachIndexed { index, address ->
            if (!address.isEmpty()) {
                val longId = address.toLong()
                context.contentResolver.query(ContentUris.withAppendedId(singleCanonicalAddressUri, longId), null, null, null, null).use { cursor ->
                    if (cursor != null && cursor.moveToNext())
                        addressArray[index] = "${cursor.getString(0)} "
                }
            }
        }
        return addressArray
    }
    return arrayOf()
}

希望这有帮助。这个函数也在kotlin中,但是很容易知道那里发生了什么。
另外,您已经有了id,所以您可以使用空格分隔的id或不使用它们来调用此方法,该函数以两种方式工作。

关于android - 如何获取彩信群聊参与者的电话号码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52186442/

10-13 03:00