SmsMessage 在 Kotlin 库中如何工作?

问题描述 投票:0回答:1

我不明白这个类在接收新短信时如何工作。

我的问题是,如果短信正文中有“#”符号,则消息的第一部分会进入

getDisplayMessageBody()
,消息的第二部分会进入
getMessageBody()

我需要做什么才能收到所有内容? 在我看来,它的工作方式有点奇怪,尽管它是为 SMS 设计的。

收到的短信示例:某些文本有效#100%

如果我只读取 getMessageBody(),我将得到以下文本:

#100%

并且在get中“getDisplayMessageBody()”将被存储:

一些文字作品

android kotlin sms symbols
1个回答
0
投票

您所描述的行为可能是由于 SMS 消息的构造方式造成的,尤其是当涉及“#”等特殊字符时。

短信可能有两部分:用户数据头(UDH)和用户数据。 UDH 通常用于将多条 SMS 消息连接成一条或指示消息中的特殊格式。

SmsMessage 类中的 getMessageBody() 和 getDisplayMessageBody() 可能有不同的行为:

  1. getMessageBody():此方法返回短信的用户数据部分,其中包括文本消息本身。在您的示例中,它正确返回“#100%”,因为这是用户数据的内容。

  2. getDisplayMessageBody():此方法返回短信的可显示部分,通常是要向用户显示的短信内容。在您的示例中,它返回“Some text Works”,因为 UDH 或任何特殊格式都被删除,这是通常向用户显示的 SMS 部分。

所以我认为如果你想收到完整的消息,你必须将这两者连接起来:

String fullMessage = smsMessage.getDisplayMessageBody() + smsMessage.getMessageBody();
© www.soinside.com 2019 - 2024. All rights reserved.