获取不在联系人列表中的短信发件人姓名?

Get SMS sender name who is NOT in contact list?

我正在尝试获取 SMS 发件人的姓名,该发件人不在用户的联系人列表中。有时,我们收到一些corporations/banks等人的短信,在我们的短信框的短信列表项中,我们可以看到那个corporation/bank的名字是header,而不是他们的号码,甚至如果我们没有将它保存到我们的联系人列表中。是否可以通过从广播接收器获得的意图获得该名称? 现在我从 SMS 意图中获取 'pdu',并从中创建 SMSMessage object 作为:

                    @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();
    
                    }

但是SMSMessageclass似乎没有任何方法可以让我们获取发件人的名字。

我们怎么做? 非常感谢!

可以发送短信并提供字母数字字符串作为“发件人”而不是发件人的 phone 号码。那可能就是你所看到的。您应该能够使用 getOriginatingAddress().

获取此字母数字字符串