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

SMS missing from content provider results on Android Marshmallow

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

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

我也查看了 SIM 卡,看看是否有丢失的短信,但没有找到:

Uri uri = Uri.parse("content://sms/icc");

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

<uses-permission android:name="android.permission.READ_SMS" />

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

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

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

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

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