gpt4 book ai didi

android - Kotlin:如何获取短信发件人的电话号码

转载 作者:行者123 更新时间:2023-12-04 21:28:49 25 4
gpt4 key购买 nike

我正在尝试阅读用户的 SMS 消息并获取这些消息的发件人的电话号码。当我尝试通过 "address" 列获取消息的发件人电话号码时,它返回文本对话的电话号码( 例如 ,如果 I 向电话号码为 X _0x10457 的用户发送消息 X _0x104576列返回 X 而不是 我的电话号码 ),而不是发送消息的人的电话号码。下面是我的 Kotlin 代码:

var cursor = contentResolver.query(
Uri.parse("content://sms/"),
null,
null,
null,
null
)

// Retrieve the IDs of the sender's name
var senderID = cursor!!.getColumnIndex("address")

// Iterate through every message
while (cursor!!.moveToNext()) {
var messageSender = cursor.getString(senderID) // Get the sender of the message
System.out.println("---------------------------------------------------------")
System.out.println(messageSender) // Returns phone number of the conversation, not the sender
}

例如:电话号码为 123456789 的用户向您发送消息。我想 检索电话号码 123456789

最佳答案

我找到了解决方案。您必须使用 type列来标识消息是已发送还是已接收。
消息发送后,您可以从电话管理器中读取电话号码。

fun getMessageSender(cursor: Cursor): String {
val partnerAddressId = cursor.getColumnIndex("address")
val typeId = cursor.getColumnIndex("type")

val partnerAddress = cursor.getString(partnerAddressId)
val type = cursor.getString(typeId)

return if (type.equals("1", true)) {
partnerAddress
} else {
getPhoneNumber()
}
}
private fun getPhoneNumber(): String {
val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
return telephonyManager.line1Number
}

但请注意,我不知道这会如何影响具有 Multi Sim 的设备。我可以想象这里会返回错误的数字。

我结合以下帖子制定了此解决方案:
Getting phone number of each sms via content://sms/
Programmatically obtain the phone number of the Android phone

关于android - Kotlin:如何获取短信发件人的电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58758282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com