我正在开发一个Cordova应用程序,它需要能够在一个群组文本中获得涉及的电话号码列表。我正在向content://mms/[id]/addr
查询。我在Pixel2上测试,对于2018年3月10日之前的MMS信息,这个效果很好。但对于在该日期或之后的消息,它将失败(返回为空)。我应该查询其他地址吗?还有其他想法吗?
最佳答案
以下是aosp(android开源项目)的消息应用程序是如何做到的:
每条消息(sms/mms)在各自的表中都有一个表示为_ID
的消息id
用这个id
为相应的消息拉线程threads
表有一个名为recipient_ids
的列,这可能是组消息的空格分隔,如下所示:
123 456 789号
其中123
456
等是收件人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/