如果手机(本机)中存在多条未读短信,如何通知从本机(手机)读取了哪些短信?

2024-05-06

如果本机(手机)中存在 3 条未读 SMS 消息,并且用户已阅读其中一条 SMS。如何识别在我们的应用程序中读取了哪些短信(从本机)。

目前我正在使用 ContentObserver ,当用户从本机(电话)读取短信时,会调用 onChange() 方法。

我能够获取所有未读的短信:

Cursor cursor = this.getContentResolver().query(Uri.parse("content://sms/"), null, "read = 0", null, null);

如何识别从本机(电话)读取了哪些短信。任何帮助或指导将不胜感激。

在 Nexus 4(Android 4.3) - API 18) 中,如果 Android Native Sms Client 中两条未读短信(属于两个不同的发件人)的通知(在设备状态栏中),用户单击该通知,则会调用 onChange(context, uri)在我的应用程序中,我尝试获取已读短信的ID:

String id = uri.getLastPathSegment();

对于上述情况,“收件箱”作为“id”的值出现。但是,当用户从 Android Native Sms Client 中读取任何 SMS 时,不会调用 onChange(context, uri) 方法。

在 Samsung Galaxy S3(Android 4.1.2 - API 16) 中,在任何一种情况下都不会调用 onChange(context, uri)(即,如果用户从 Native 读取短信或用户单击通知(在设备状态栏中) )Android Native Sms Client 中的两条未读短信(属于两个不同的发件人)。

(在 API 16 中,当本机收到新短信时,将调用 onChange(context, uri),并且“id”的值等于该短信的唯一 ID - 在 Nexus 4(Android 4.3) 上测试)

注意:此处,“来自本机”是指“来自设备的默认 SMS 客户端”。


为了确定哪条消息已从未读更改为已读,您可能必须在自己的数据结构中跟踪所有未读消息的状态,并在内容观察器检测到的每个 onChange 期间进行比较,以确定哪些/是否有消息更改了读取状态。您可以通过在内容解析器查询中包含额外的投影和选择参数来将数据集缩小到仅感兴趣的字段,从而提高性能。

希望接下来的Google 承诺的短信 API 变更 http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.htmlAndroid 4.4 中的 Android 4.4 将不再需要使用隐藏的 API 和内容提供程序来实现此类目的。

您还可以通过查找由com.android.mms.data.Conversation https://android.googlesource.com/platform/packages/apps/Mms/+/a31f51757729c398165682f3107aa17a6e03eb94/src/com/android/mms/data/Conversation.java本机消息应用程序使用的类:

D/Mms (1645): [192] markAsRead: update read/seen for thread uri: content://mms-sms/conversations/4

但是,这可能并不总是可靠,并且无法在 Android 4.1+ 设备上运行,除非您的应用程序由于 API 级别 16 中对 READ_LOGS 权限的限制而具有系统权限。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果手机(本机)中存在多条未读短信,如何通知从本机(手机)读取了哪些短信? 的相关文章

随机推荐

  • parse_str 在元素前面加上 & 符号?

    我一直在玩 cURL 并尝试将数组作为 POST 变量发送 我决定使用 http build query 按预期传递字符串 curl setopt this gt ch CURLOPT POSTFIELDS http build query
  • 如何计算PHP中内置函数的总数? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 如何计算
  • 如何从 .Net 中的许多 HTML 文件中读取 xpath 值?

    我的一个文件夹中有大约 5000 个 html 文件 我需要循环遍历它们 打开 使用 xpath 获取 10 个值 关闭并存储在 SQL Server 数据库中 使用 Net 读取 xpath 值的最简单方法是什么 xpath 应该相当稳定
  • 如何通过内存将文件上传到Google Drive [python]

    我一直在论坛上搜索 但没有成功解决我的问题 我正在尝试使用 Google Drive Python API 将内存中的文件上传到 Google Drive 但是 我见过的所有示例都使用磁盘上具有特定文件路径和名称的文件 service bu
  • 在 Ada 中定义通用标量类型包

    我想通过制作一个用于操作多项式的 Ada 包来测试编写 Ada 包的水 可以为多种代数结构定义多项式 因此为了反映这一点 我想使该包通用 以便它可以与浮点数 整数或其他数字子类型一起使用 我现在想说 我对 Ada 的类型系统如何工作或者它的
  • 如何设置 Xcode 来代替 Qt Creator 工作?

    我不使用 Qt Creator 的 UI 设计功能 对于一个新项目 我想体验一下使用 Xcode 的工作 这将是一个常规的 Qt 项目 使用 C 和 Qt 库开发 就像在 Qt Creator 中一样 我没有使用 OS X 尤其是 Xcod
  • 使用 PHP 的 JavaScript atob 操作

    我想知道是否可以使用 PHP 解密 JavaScript 加密文本 使用 JavaScript 的 btoa 函数加密 看一下base64 decode http php net manual en function base64 deco
  • XML声明编码

    它实际上有什么作用 根据我的基本理解 XML 只是一种格式化文本 所以不涉及二进制文本转换 我高度怀疑 UTF 8 和 ASCII 编码之间的唯一区别是 ASCII 编码会将所有非 ASCII 字符转换为 XML 实体 而不是仅保留 XML
  • Jetpack Compose:嵌套导航,在嵌套路径中使用底部栏导航

    我的应用程序具有以下结构 并且由于路线 B 有自己的底部导航栏 因此有自己的 NavHost 我如何从屏幕 C 从选项卡栏打开 导航到路线 A Nested Route onboarding route startDestination s
  • bootstrap-3 在 div 底部对齐链接和按钮

    从下面的屏幕截图中可以看出 链接并未在底部对齐div 如何对齐按钮edit delete add cart在底部div 注意我没有使用table bottomaligned position absolute bottom 0 margin
  • 通用高阶函数

    当我将泛型函数作为本地值传递时 但在作为参数传递时却不能使用具有不同类型参数的泛型函数时 是否有原因 例如 let f id let g x y f x f y g 1 2 工作正常 但如果我尝试将函数作为参数传递 let g f x y
  • Java:不可变类的伪 setter 方法

    假设我有一个 Java 类 Foo 它具有不可变的数据 class Foo final private int x public int getX return this x final private OtherStuff otherst
  • 检查变量是否为空或空字符串的更好方法?

    由于 PHP 是一种动态语言 检查提供的字段是否为空的最佳方法是什么 我想确保 null 被视为空字符串 仅包含空格的字符串被视为空 0 不被视为空 这是我到目前为止所得到的 question trim POST question if q
  • 抛出异常但保留堆栈跟踪

    我想抛出异常 但也带有自定义消息和持久堆栈跟踪 我已经经历了各种线程 catch Exception ex throw Message is read only but stacktrace persist throw ex Message
  • 可变参数模板的模板模板参数扩展

    我最近了解到模板模板参数的存在 现在想知道是否可以这样做 template
  • 使用 asp.net mvc 在 Dropbox 中下载文件

    我正在使用 ASP net MVC 4 和 Dropbox API 从我的 Dropbox 帐户下载文件 我已经在我的项目中成功安装了 api 我正在关注本教程 https www dropbox com developers docume
  • SQLAlchemy - 将文本查询与过滤器结合起来

    我在用着SA 0 6 6 Python 2 66 and Postgres 8 3 我有某些查询需要一些复杂的安全检查 可以使用WITH RECURSIVE询问 我想做的是将文本查询与查询对象结合起来 这样我就可以根据需要应用过滤器 我最初
  • 发布后订阅状态发生变化

    成功安装 Cygnus 连接器并测试订阅的创建后 具有以下文件 agent 1 conf cygnus ngsi sources http source cygnus ngsi sinks hdfs sink cygnus ngsi cha
  • 为每个具有缺失值的组添加行[重复]

    这个问题在这里已经有答案了 每个篮子可容纳的水果总数为 10 对于每个篮子 如果计数为 10 并且缺少一个水果 我想为该篮子添加一行 该行表示该水果的计数为 0 这是生成数据帧的代码 Basket lt c A A B B C C C Fr
  • 如果手机(本机)中存在多条未读短信,如何通知从本机(手机)读取了哪些短信?

    如果本机 手机 中存在 3 条未读 SMS 消息 并且用户已阅读其中一条 SMS 如何识别在我们的应用程序中读取了哪些短信 从本机 目前我正在使用 ContentObserver 当用户从本机 电话 读取短信时 会调用 onChange 方