Котлин: Как узнать номер телефона отправителя SMS-сообщения - PullRequest
2 голосов
/ 08 ноября 2019

Я пытаюсь прочитать SMS-сообщения пользователя и получить номер телефона отправителя этих сообщений. Когда я пытаюсь получить номер телефона отправителя сообщения через столбец "address", он возвращает номер телефона текстового разговора (, например, , если I отправит сообщениепользователь с номером телефона X , столбец address возвращает 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 .

Ответы [ 2 ]

0 голосов
/ 16 ноября 2019

Я нашел решение. Вы должны использовать столбец 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. Я мог предположить, что неправильный номер будет возвращен здесь.

Я разработал это решение в сочетании со следующими сообщениями:
Получение номера телефона каждой смс через контент: // sms /
Программным путем получитьномер телефона телефона Android

0 голосов
/ 15 ноября 2019

В коде Android по умолчанию нет опции, которую вы ожидали.

Это может быть из-за безопасности или по другим причинам.

Я проверил все имена столбцов курсора с запросом, нет возможности получить имена отправителей в отправленном. сообщение

Здесь все имена столбцов

coluns_default

...