什么Android代码将传入的SMS消息写入SMS数据库?

时间:2011-09-14 21:32:38

标签: android

SMS消息在发送时以PDU格式(http://www.dreamfabric.com/sms/)编码,最终在Android数据库中结束(“content:// sms”)。我试图找出收到SMS消息时的数据流。特别是我想知道什么代码片段解码PDU并进入SMS数据库。

我感兴趣的原因是,在某些情况下,数据库中的时间戳与发送消息的时间不同。对我来说,在某些地方将来会有5个小时。这取决于塔,我被告知这是因为从塔上得到了错误的时间。但是,时间戳(包括时区)应该在PDU中编码,并且电话上也来自塔的时间是正确的。因此,对我来说没有意义。我试图追查它。

感谢。


androidnoob,

感谢您提供的信息。我可以在“content:// sms”或“content:// sms / inbox”或“content:// sms / sent”或其他一些消息中获取所有消息。我认为这就是你建议的链接。这些消息在数据库中,并且已经被我认为我追随的代码放在那里。

我还可以为“android.provider.Telephony.SMS_RECEIVED”设置BroadcastReceiver。我在回调中得到的消息还没有在数据库中。 PDU可用,但我不知道它们是否与发送的相同或是否已生成。

提供此信息的类位于com.android.internal.telephony中。这些类不在android.jar中,我没有跟踪它们的源代码。它们似乎可以从git://android.get.kernel.org/platform/base/telephony获得。问题是(1)我对Git不是很有经验,而且(2)由于它在9月1日左右被黑客入侵,这个存储库似乎已经失效了。无论如何我都无法得到它们。沮丧或缺乏经验。

我无法测试当我处于给出错误时间戳的位置时会发生什么,但我注意到如果我现在向自己发送消息,则传入的时间戳约为30秒在我实际发送消息之前,根据设备时间。在回调时,我发送的消息是在数据库中,一段时间后收到的消息也在数据库中,其传入时间戳(日期列)和更高的_id,通常是原始的_id + 1。意味着它具有更高的_id但更早的时间。这使得它看起来像是在发送之前收到的消息。在不好的位置,时间戳是未来5小时而不是过去30秒。在这两种情况下,它都不是设备发送时的时间。

1 个答案:

答案 0 :(得分:0)

我自己并不熟悉SMS解析代码,但在浏览android框架后,它看起来像frameworks / base / core / java / com / google / android / mms / pdu / PduParser.java是主要的SMS解析逻辑。