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

我的问题是,如果短信正文中有一个"#"符号,那么消息的第一部分进入getDisplayMessageBody(),消息的第二部分进入getMessageBody().

我需要做什么才能同时接收所有内容? 在我看来,尽管它是为短信设计的,但它的工作方式似乎有些奇怪.

收到短信的例子:一些文本作品#100%

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

#100%

并在GET中存储getDisplayMessageBody():

一些文字作品

推荐答案

您描述的行为可能与短信的构造方式有关,尤其是涉及"#"等特殊字符时.

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

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

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

  2. 100():此方法返回短信的可显示部分,通常是要显示给用户的短信内容.在您的示例中,它返回"Some Text Works",因为UDH或任何特殊格式都被go 掉了,这是通常显示给用户的短信部分.

因此,我认为如果你想接收完整的消息,你必须将这两者连接在一起:

在Kotlin :

val fullMessage = smsMessage.displayMessageBody + smsMessage.messageBody

在Java中:

String fullMessage = smsMessage.getDisplayMessageBody() + smsMessage.getMessageBody();

Android相关问答推荐

三星上的某些应用程序已禁用通知权限切换

房间数据库迁移未正确处理:原因:java.lang. IllegalState异常:

如何使TextField的背景透明?

Android Kotlin DSL Gradle找不到自定义存储库中的依赖项

Android:MethodHandle. invoke和MethodHandle. invokeExact仅从Android O( - min—api 26)开始支持

KMM项目生成错误-';在项目';中找不到测试类:共享';

如何go 除回调流中不可用的状态?

Android 14上的慢速意图广播交付

OverridePendingTransition已弃用,我该怎么办?

如何显示具体的商品数量?

块不起作用,出现 "只有安全的 (?.)... " 错误

在 Android 房间迁移中获取上下文

java.lang.ExceptionInInitializerError -- 原因:java.lang.NullPointerException

视觉转换后获取文本

找不到(包名称).在以下位置搜索:

为片段设置主题

react 从输入中找到路径'lib/arm64-v8a/libfbjni.so'的本机2个文件

使用 capacitor cordova 插件的 Android Studio 错误

Unity:Android 上随机接近零的 FPS 下降(提供了很多线索)

如何使伴奏导航 BottomSheet 完全展开?