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

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() 获取此字母数字字符串。

【讨论】:

以上是关于获取不在联系人列表中的短信发件人姓名?的主要内容,如果未能解决你的问题,请参考以下文章

Android SMS 按收件人 ID 显示联系人姓名

如何使用电话簿中的联系人发送短信而不是写电话号码?

如何将联系人信息放入短信广播接收器类?

收到短信时,联系人姓名未显示在通知中

向联系人列表中的电话号码发送短信

Android通过电话号码有效地获取联系人姓名以在ListView中显示