获取不在联系人列表中的短信发件人姓名?
Posted
技术标签:
【中文标题】获取不在联系人列表中的短信发件人姓名?【英文标题】:Get SMS sender name who is NOT in contact list? 【发布时间】:2021-02-28 12:27:04 【问题描述】:我正在尝试获取不在用户联系人列表中的 SMS 发件人的姓名。有时,我们从一些公司/银行等处收到短信,我们可以在短信框中的短信列表项中看到该公司/银行的名称作为标题,而不是他们的号码,即使我们没有将其保存到我们的联系人列表。是否可以通过从广播接收器获得的意图获得该名称? 现在我从 SMS 意图中获取“pdu”,并从中创建 SMSMessage 对象:
@Override
public void onReceive(Context context, Intent intent)
Bundle data = intent.getExtras();
Object[] pdus = (Object[]) data.get("pdus");
String recMsgString = "";
for(int i=0; i<pdus.length; i++)
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
byte[] userData = smsMessage.getUserData();
if (userData!=null)
for(int index=0; index<userData.length; ++index)
recMsgString += Character.toString((char)userData[index]);
message =
"Service center address: " + smsMessage.getServiceCenterAddress()+
"\nPseudo object: " + smsMessage.getPseudoSubject() +
"\nDisplay originating address : " +
smsMessage.getDisplayOriginatingAddress()
+ "\nOriginating address : " + smsMessage.getOriginatingAddress()
+"\nUser data : " + recMsgString
+ "\nEmail From: " + smsMessage.getEmailFrom()
+ "\nEmail Body: " + smsMessage.getEmailBody()
+ "\nDisplay message body: " + smsMessage.getDisplayMessageBody()
+ "\nTime in millisecond: " + smsMessage.getTimestampMillis()
+ "\nMessage: " + smsMessage.getMessageBody();
但是 SMSMessage 类似乎没有任何方法可以让我们获取发送者的姓名。
我们该怎么做? 非常感谢!
【问题讨论】:
可以发送短信并提供一个字母数字字符串作为“发件人”而不是发件人的电话号码。这可能就是您所看到的。 @DavidWasser 我们如何获取发件人的字母数字字符串而不是他们的电话号码。我们可以通过 SmsMessage 类的“getOriginatingAddress()”方法获取发件人的号码。我们如何获取发件人的字母数字字符串? 我很确定如果他们将发件人设置为您在getOriginatingAddress()
中得到的字符串。
@DavidWasser,好的,谢谢。也许您可以将上述 cmets 作为此问题的答案,以便我将其标记为最佳答案。
完成。请让我知道这是否适合您。
【参考方案1】:
可以发送短信并提供一个字母数字字符串作为“发件人”而不是发件人的电话号码。这可能就是您所看到的。您应该可以使用getOriginatingAddress()
获取此字母数字字符串。
【讨论】:
以上是关于获取不在联系人列表中的短信发件人姓名?的主要内容,如果未能解决你的问题,请参考以下文章