我不明白这个类在接收新的短信时是如何工作的。
我的问题是,如果SMS正文中有一个“#”符号,那么消息的第一部分进入getDisplayMessageBody()
,消息的第二部分进入getMessageBody()
。
我需要做什么才能收到所有的东西?在我看来,它不知何故奇怪的工作,虽然它是专为短信。
收到的SMS示例:一些文本作品#100%
如果我只读取getMessageBody(),我将得到以下文本:
100%
在get中,“getDisplayMessageBody()”将被存储:
一些文字作品
1条答案
按热度按时间nmpmafwu1#
您所描述的行为可能是由于SMS消息的构造方式,特别是当涉及到像“#”这样的特殊字符时。
SMS消息可以有两个部分:用户数据头(UDH)和用户数据。UDH通常用于将多个SMS消息连接为一个消息或用于指示消息中的特殊格式。
SmsMessage类中的getMessageBody()和getDisplayMessageBody()可能具有不同的行为:
1.getMessageBody():此方法返回SMS的用户数据部分,其中包括文本消息本身。在您的示例中,它正确地返回“#100%”,因为这是用户数据的内容。
1.getDisplayMessageBody():此方法返回SMS的可显示部分,通常是要显示给用户的SMS内容。在您的示例中,它返回“Some text works”,因为UDH或任何特殊格式被剥离,这是通常显示给用户的SMS部分。
所以我觉得如果你想收到完整的信息,你必须把这两个连接起来:
在Kotlin中:
在Java中: