Как узнать номер телефона получателя SMS в Android
Я видел много вопросов, спрашивающих, как получить номер телефона отправителя SMS, но не номер телефона получателя. Я использовал инструмент на этом сайте для генерации PDU и могу видеть номер телефона получателя:
Полезные детали PDU и инструмент перевода PDU
Однако я не вижу нигде в классе SmsMessage, предоставляемом Android, где я могу получить номер телефона получателя. Причина, по которой я хочу это сделать, заключается в том, что у меня есть телефон с двумя SIM-картами, но я не вижу нигде в Android, где я могу определить, какой порт SIM-карты используется для входящего SMS. По крайней мере, я хочу посмотреть каждое SMS-сообщение и определить, на какой номер телефона они были отправлены.
Этот вопрос кажется очень похожим на мой, но без ответов:
Как получить номер телефона получателя SMS в Android
У меня другой вопрос, потому что я подробно описал ссылку на сайт о PDU, который может быть полезен для извлечения телефонного номера из необработанных байтов PDU, которые предоставляет класс SmsMessage.
Есть идеи?
1 ответ
Это зависит от того, с какой точки вы смотрите смс-сообщение. SMS PDU находится поверх протокола MAP.
Когда вы отправляете SMS-сообщение, телефон помещает номер получателя в TP-Destination внутри PDU, при получении SMS-сообщения номер получателя нигде не отображается. Причина этого в том, как работает SMS. Когда кто-то отправляет вам SMS, сеть GSM на своей стороне запрашивает для вас сообщение SRIsm, это означает, что его HLR попытается найти вас либо в своей домашней сети, либо через ваш домашний HLR. Ответ от HLR - это номер IMSI (ваша SIM-карта) и номер VLR/MSC, на которые сеть отправителя должна отправить SMS. Во втором пакете, который фактически является SMS-сообщением (Forward-MT), следовательно, является только ваш номер IMSI. Поскольку у вас есть две SIM-карты, вы можете попытаться найти по этому номеру, на какую SIM-карту направляется SMS. Обратите внимание, что номер IMSI не является частью PDU, а скорее более низким протоколом MAP.