Android短信Messaging数据库字段分析

  • Post author:
  • Post category:其他




数据库提取

  • 在 Android Studio 中点击

    Device File Explorer

    按钮。
  • 选择

    /data/data/com.xxx.xxx/databases/bugle_db

    右键

    Save As

    保存到本地。

  • 注:com.xxx.xxx 为当前自己的工程目录



数据库说明

  • Messaging创建了数据库

    bugle_db

    用于同步

    mms/sms.db

    的数据,短信查询时直接从

    bugle_db

    数据库进行查询。



数据库内表和视图:

  • conversation_list_view:主界面的视图,是把conversations、messages和participants三个表的数据糅合起来的视图,方便主界面的各项数据显示。
  • conversation_participants:记录conversation和它的联系人participatant的关联。
  • messages:记录每一条短彩信的数据,包括远程uri和已读状态等。
  • parts:记录短彩信的实际内容,比如文本或者图片uri,跟messages关联能得到完整的短彩信数据。


数据库中数据表有:

conversations、messages、parts、participants、conversation_participants等。


视图有:

draft_parts_view 、coversation_image_parts_view 、conversation_list_view。



数据表

数据表 conversation_participants

字段 数据类型 说明
conversation_id int 会话人属于那一场会话
participant_id int 会话人id

数据表 conversations

字段 数据类型 说明
_id int 主键ID
sms_thread_id int SMS/MMS Thread ID from the system provider
name String 信息名称
latest_message_id int 最新消息id
snippet_text String 最新更新的消息的内容(彩信为主题,短信为正文)会话列表中显示的简要消息
subject_text String 会话列表中显示的简要消息
preview_uri String 预览Uri
preview_content_type String 预览Uri类型
show_draft int 是否显示当前草稿
draft_snippet_text String 最新的草稿简要
draft_subject_text String 最新的草稿主题
draft_preview_uri String 草稿预览uri
draft_preview_content_type String 草稿预览uri类型
archive_status archive_status 会话是否归档
sort_timestamp int 时间戳用于排序
last_read_timestamp int 最新阅读短信时间戳
icon String 会话Icon
participant_contact_id int 参与者联系人ID(如果此对话只有一个参与者)。否则为-1
participant_lookup_key String 参与者查找键(如果此对话只有一个参与者)。否则为空
participant_normalized_destination String 参与者的标准化目的地(如果此对话只有一个参与者)。否则为空。
current_self_id String 自身的id?
participant_count int 参与者人数不包括自己(因此1:1的比例为1或更大的比例为1:1)
notification_enabled int 对话是否启用通知
notification_sound_uri String 通知铃声
notification_vibration int 是否启动震动
include_email_addr int 会话包含Email?
sms_service_center String
IS_ENTERPRISE int 是否是企业对话
is_top int 是否置顶(后期添加字段)

数据表 messages

字段 数据类型 说明
id int 主键
conversation_id int 会话id关联conversations中id
sender_id int 发送该消息的会话人id
sent_timestamp int 发送消息时间戳
received_timestamp int 接收消息时间戳
message_protocol int 信息类型:短信息、彩信或彩信通知
message_status int 消息状态
seen int 是否被用户在通知中看见0和1
read int 是否被用户已阅读0和1
sms_message_uri String 来自平台提供程序的消息ID
sms_priority int 信息的优先级
sms_message_size int 彩信大小
mms_subject String 彩信主题
mms_transaction_id String MMS通知的事务id
mms_content_location String 彩信通知的内容位置
mms_expiry int 过期时间
raw_status int 详细的状态比如那条短信是发送成功还是失败
self_id int 代表处理此消息的sim卡的参与者
retry_start_timestamp int 开始重试的时间。用于计算重试窗口,当重试发送/下载邮件。

数据表 parts

字段 数据类型 说明
_id int 主键自增
message_id int 附件属于那条消息
conversation_id int 附件属于那次会话
text String 附件文字
uri String 附件内容uri
content_type String 附件内容类型
width int 此附件的缓存宽度(用于加载时的布局)
height int 此附件的缓存高度(用于加载时的布局)
timestamp int 同message表中时间戳

数据表 participants

字段 数据类型 说明
_id int 主键
sub_id int 参与者关联的sim卡的订阅id。在L中引入。对于早期版本,将始终使用默认的-1。对于多sim卡设备(或sim卡已更改的情况)单个设备,可能有几个不同的sub_id值
sim_slot_id int 此自参与者的活动SIM(插入设备中)的插槽。如果自参与者与任何活动SIM不对应,这将是链接android.telephony.SubscriptionManager.对于所有非自参与者,该列将被忽略
normalized_destination String 如果可能,电话号码将以标准E164格式存储。这是一个独特的对于给定参与者,我们不能用同一个电话号码处理多个参与者,因为我们不知道消息来自哪一个。这也可以是电子邮件地址,在这种情况下,它与显示的地址相同
send_destination String 发送短信的号码
display_destination String 添加行时,根据设备的区域设置对电话号码进行用户友好的格式设置
full_name String 全名
first_name String
profile_photo_uri String 头像
contact_id int 联系人id
lookup_key String 包含有关如何在联系人查找中查找联系人信息的提示的字符串
blocked int 是否该用户被拦截
subscription_color int 订阅的颜色?
subscription_name String 订阅的名字?
contact_destination String 存储在此参与者的联系人中的确切目的地



视图

conversation_list_view

查询对话列表

SELECT conversations._id AS _id,
       conversations.name AS name,
       conversations.current_self_id AS current_self_id,
       conversations.archive_status AS archive_status,
       messages.read AS read,
       conversations.icon AS icon,
       conversations.participant_contact_id AS participant_contact_id,
       conversations.participant_lookup_key AS participant_lookup_key,
       conversations.participant_normalized_destination AS participant_normalized_destination,
       conversations.sort_timestamp AS sort_timestamp,
       conversations.show_draft AS show_draft,
       conversations.draft_snippet_text AS draft_snippet_text,
       conversations.draft_preview_uri AS draft_preview_uri,
       conversations.draft_subject_text AS draft_subject_text,
       conversations.draft_preview_content_type AS draft_preview_content_type,
       conversations.preview_uri AS preview_uri,
       conversations.preview_content_type AS preview_content_type,
       conversations.participant_count AS participant_count,
       conversations.notification_enabled AS notification_enabled,
       conversations.notification_sound_uri AS notification_sound_uri,
       conversations.notification_vibration AS notification_vibration,
       conversations.include_email_addr AS include_email_addr,
       messages.message_status AS message_status,
       messages.raw_status AS raw_status,
       messages._id AS message_id,
       participants.first_name AS snippet_sender_first_name,
       participants.display_destination AS snippet_sender_display_destination,
       conversations.IS_ENTERPRISE AS IS_ENTERPRISE,
       conversations.is_top AS is_top,
       conversations.snippet_text AS snippet_text,
       conversations.subject_text AS subject_text
  FROM conversations
       LEFT JOIN
       messages ON (conversations.latest_message_id = messages._id) 
       LEFT JOIN
       participants ON (messages.sender_id = participants._id) 
 ORDER BY conversations.sort_timestamp DESC;

coversation_image_parts_view

查询图片列表

SELECT messages.conversation_id AS conversation_id,
       parts.uri AS uri,
       participants.full_name AS _display_name,
       parts.uri AS contentUri,
       NULL AS thumbnailUri,
       parts.content_type AS contentType,
       participants.display_destination AS display_destination,
       messages.received_timestamp AS received_timestamp,
       messages.message_status AS message_status
  FROM messages
       LEFT JOIN
       parts ON (messages._id = parts.message_id) 
       LEFT JOIN
       participants ON (messages.sender_id = participants._id) 
 WHERE parts.content_type LIKE image/%
 ORDER BY messages.received_timestamp ASC,
          parts._id ASC;

draft_parts_view

查询草稿附件

SELECT parts._id AS _id,
       parts.message_id AS message_id,
       parts.text AS text,
       parts.uri AS uri,
       parts.content_type AS content_type,
       parts.width AS width,
       parts.height AS height,
       messages.conversation_id AS conversation_id
  FROM messages
       LEFT JOIN
       parts ON (messages._id = parts.message_id) 
 WHERE messages.message_status = 3;

参考:


安卓短信Messaging数据库表格整理与字段分析



版权声明:本文为weixin_42814000原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。