【发布时间】: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 作为此问题的答案,以便我将其标记为最佳答案。
-
完成。请让我知道这是否适合您。
标签: android android-intent broadcastreceiver sms