3

众所周知,Android 的 SMS 存储为:

CREATE TABLE sms (_id INTEGER PRIMARY KEY,
   thread_id INTEGER,
   address TEXT,
   person INTEGER,
   date INTEGER,
   date_sent INTEGER DEFAULT 0,
   protocol INTEGER,
   read INTEGER DEFAULT 0,
   status INTEGER DEFAULT -1,
   type INTEGER,
   reply_path_present INTEGER,
   subject TEXT,
   body TEXT,
   service_center TEXT,
   locked INTEGER DEFAULT 0,
   error_code INTEGER DEFAULT 0,
   seen INTEGER DEFAULT 0
)

在使用双卡手机的情况下,是否可以预期某些参数可以用来识别使用哪个 SIM 卡发送/接收短信?

已知person == NULL在正常情况下用于发送短信;我的双卡 MTK 手机似乎没有任何倾向记住在对话中从哪个 SIM 卡发送了消息(这就是我曾经向朋友泄露我的工作号码的方式......)

另外,我猜仍然只有一个 SMS 内容文件夹(否则会出现严重的兼容性问题),并且 ContentValues 似乎也无法存储太多数据。

但是,我仍然想同时支持 HTC 和 MTK 的双卡解决方案;将传入/传出 SMS 与 SIM # 关联的最知名方法是什么?如何获取传出短信的发件人#并获取传入的接收路径号?


PS“服务中心#”是已知但被拒绝的解决方案-我确实在一部手机中拥有来自一家运营商的两张 SIM 卡。

4

1 回答 1

0

我会建议:

1 - 构建一个支持双卡设备的消息应用程序。让用户将此应用设为默认应用很重要。因为从 Android 19 ( Kitkat ) 开始,只有默认消息应用程序可以访问 db。

2 - 使用这种方式来管理用于发送消息的 SIM 卡。https://stackoverflow.com/a/30677542/2267723

3 - 这意味着您的应用程序用于将数据存储到数据库中以接收/发送/发送消息 (SMS/MMS)。你们中的一些人知道#2 使用了哪个 sim,然后将 sim_ID 存储在 DB 中。稍后您可以使用它来了解哪个 sim 管理该消息。

在此处输入图像描述

提示:最好存储 SIM 的 ID(IMSI /subscriberID)或者您可以使用 SIM 卡的序列号来识别 SIM,如果该 ID 属于插入的 SIM,则在应用程序中,您可以将消息称为 SIM1 或SIM2 消息。否则,将消息独立于 SIM 插槽...不建议将值为 0/1 或 1/2 的消息存储为已用 sim 的标识符。因为如果用户更改 SIM 卡或切换它们 .. 会有冲突。你可以看到它是一个破碎的设计。

祝你好运,

于 2015-06-06T01:00:42.583 回答