Android Marshmallow 上的内容提供商结果中缺少短信

Mul*_*per 5 java provider sms android mms

自三星 S7 推出以来,一些短信丢失并且从未显示在 content://sms 提供商 URI 中。我注意到同一运营商(在本例中为 T-Mobile)上的多个三星设备(S6 和/或 S7)之间存在这种情况,但可能不限于此。这些短信显示在默认的股票消息应用程序中,但我找不到如何访问它们。请记住,我通过该内容提供商可以正常收到 97% 的短信,但最后 3% 的短信我却无法接收。

Uri uri = Uri.parse("content://sms/");
String[] projection_sms = { "*" };
Cursor cursor = getContentResolver().query(uri, projection_sms, "", null, null);
Run Code Online (Sandbox Code Playgroud)

我还检查了 SIM 卡,看看是否存在丢失的短信,但什么也没发现:

Uri uri = Uri.parse("content://sms/icc");
Run Code Online (Sandbox Code Playgroud)

我也检查了所有彩信,发现它们也不在那里。

<uses-permission android:name="android.permission.READ_SMS" />
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我只想读取短信,根据 Android 文档,您只需要上述权限即可从 SMS/MMS 数据库读取。我意识到 KitKat 中进行了一项更改,允许应用程序替换默认的库存应用程序,但在这种特殊情况下,我只想阅读短信。

因此,如果这些短信不在数据库中的正确位置并且不在 SIM 卡中,那么它们到底在哪里(或者我应该说在 Android 中)呢?

Mik*_* M. 2

看起来丢失的消息实际上不是短信,而是RCS消息。这些不存储在 SMS 提供程序中,因此不会从任何查询中返回,尽管支持 RCS 的设备上的消息传递应用程序可能会无缝地将它们全部显示在一起。这可以解释为什么您的查询结果似乎不完整。

RCS(丰富通信服务)基本上是增强型 SMS/MMS,除了常规短信之外,还提供实时一对一和群聊、视频通话、内容共享等功能。目前,Android 中还没有为此提供标准 API,尽管据报道 Google 正在采用它作为 SMS/MMS 的最终替代品。然而,我找不到关于如何集成或部署它的官方消息。

并非每个运营商都提供 RCS,而那些提供 RCS 的运营商则拥有专用的专有应用程序和 API 来处理它。当然,对于每个运营商/制造商来说,这些都会有所不同,甚至品牌也有很大差异。大多数人称其为joyn,而T-Mobile 将其命名为Advanced Messaging。随着 RCS 变得越来越普遍,它应该变得更加标准化,但目前在您的应用程序中支持 RCS 将需要专门的组件和设置。