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

标签: android android-intent broadcastreceiver sms


【解决方案1】:

可以发送短信并提供一个字母数字字符串作为“发件人”而不是发件人的电话号码。这可能就是您所看到的。您应该可以使用getOriginatingAddress() 获取此字母数字字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 2016-05-07
    • 2012-10-11
    • 2020-04-04
    • 1970-01-01
    相关资源
    最近更新 更多