我已经看到很多问题,询问如何获取短信发件人的电话号码,而不是收件人的电话号码。我已使用此站点上的工具生成PDU,并可在其中查看收件人的电话号码:
Useful PDU details and PDU translation tool
但是,我没有看到Android提供的SmsMessage类中的任何地方,我可以获取收件人的电话号码。我想这样做的原因是我有一部双卡手机,但在Android中没有任何地方可以看到我可以确定用于传入短信的SIM端口。至少,我想查看每条短信,并确定发送给他们的电话号码。
这个问题与我的问题非常相似,但没有答案:
How to get SMS recipient's phone number in Android
我的问题不同,因为我已经详细说明了一个关于PDU的站点的链接,这可能对从SmsMessage类提供的原始PDU字节中提取电话号码很有用。
有什么想法吗?
答案 0 :(得分:2)
这取决于您从哪一点观看短信。 SMS PDU位于MAP协议之上。
当您发送短信时,手机会将收件人号码放入PDU中的TP-Destination中,当您收到短信时,任何地方都没有收件人号码。这是因为SMS的工作原理。 当有人向您发送短信时,他身边的GSM网络会为您请求SRIsm消息,这意味着他的HLR将尝试在他的家庭网络中或通过您的家庭HLR找到您。 HLR的响应是IMSI号码(您的SIM卡)和VLR / MSC号码,发送方网络必须发送SMS。 在第二个数据包中,实际上是SMS消息(Forward-MT),因此只是您的IMSI号码。 由于您有双SIM卡,您可以尝试根据此号码查找SMS指定的SIM卡。 请注意,IMSI号不是PDU的一部分,而是较低的MAP协议。