Android接收短信意图:获取消息Id或线程Id

Android接收短信意图:获取消息Id或线程Id,android,android-intent,telephony,smsmanager,Android,Android Intent,Telephony,Smsmanager,我已经注册了一个广播侦听器来接收android.provider.Telephony.SMS\u DELIVERIntent操作 我似乎能够得到这条新消息的正文和发送者电话号码 但是,我无法获取此新消息的消息Id或线程Id。我找到的唯一方法是搜索消息和会话表以查找匹配的内容。但这似乎有点混乱,我觉得应该有一个更整洁的方式 旁注: 有没有我错过的短信文档?因为很多SMS api似乎都没有文档化。SMS中没有消息ID或线程ID。每个SMS都是完全独立于所有其他SMS的数据包。在Android中,有一

我已经注册了一个广播侦听器来接收
android.provider.Telephony.SMS\u DELIVER
Intent操作

我似乎能够得到这条新消息的正文和发送者电话号码

但是,我无法获取此新消息的消息Id或线程Id。我找到的唯一方法是搜索消息和会话表以查找匹配的内容。但这似乎有点混乱,我觉得应该有一个更整洁的方式

旁注:

有没有我错过的短信文档?因为很多SMS api似乎都没有文档化。

SMS中没有消息ID或线程ID。每个SMS都是完全独立于所有其他SMS的数据包。在Android中,有一个标准的SMS应用程序,它将SMS存储在数据库中,并使用SMS消息本身不包含的某些标准“线程”对话。但是,第三方也可以构建SMS应用程序,以完全不同的方式管理消息。这在很大程度上取决于管理SMS的特定应用程序的概念和实现。这也是为什么没有太多关于SMS系统的文档的原因。Android中可用的API是非常低级和基本的。其他应用程序在此基础上构建。

是否可以使用此基础Android应用程序/服务来确定消息的线程或id在其维护的表中?没有尝试查询表以匹配消息正文和参与者。没有一个是可靠的。例如,您可以查询内容提供商(SMS数据库可作为内容提供商使用),并请求数据库中编号最高的ID,并假设这是最近传入的消息。然而,这是不可靠的:可能会有许多连续快速接收的传入消息;此外,传入消息的存储和可用也需要一些时间,如果您提前查询,您将看不到最新的消息。因此,我尝试了SQL查询的想法,但您认为正确(毫不奇怪),当您收到Android表尚未更新的意图时。有没有办法倾听桌子上的变化?还是说我有点走运?我们过去也这么做过。您可以在收到传入消息
Intent
后等待一定时间(可能500毫秒左右),然后检查SMS数据库。你可能需要利用延迟来纠正错误,但这会让你更接近你的目标。由于您在一个
广播接收器中
,因此您实际上不能在那里等待。您需要启动另一个
线程
或将
可运行
发布到
处理程序
才能执行此操作。只是好奇,你们是如何处理新消息的?我目前的工作思路是只显示一个带有来自intent的数据的通知,该通知将使用某个标志将用户指向活动,希望此时应用程序能够查询数据库并找出消息的细节。