9

在我的应用程序中,我需要同时查询 SMS 和 MMS 日志以获取所有传入和传出消息的历史记录。这段代码非常适合 SMS:

Cursor c = cr.query(Uri.parse("content://sms"), null, null, null, null);

但是当我尝试以下操作时,我会得到完全不同的结果:

Cursor c = cr.query(Uri.parse("content://mms"), null, null, null, null);

SMS查询返回的数据包括消息地址(电话号码)、联系人姓名、消息主题、消息正文等... MMS的相同查询返回一堆我无法理解的空值或数值字段的。我真的需要一个当前在手机上的所有彩信的列表,其中包含与之关联的电话号码或联系人 ID,以及该消息是传入消息还是传出消息。在 SMS 查询结果中,我可以从字段中获取电话号码address,以及从字段中获取传入/传出类型,type但是当我查询 MMS 时,这些都不存在。

对于此类 MMS 数据,我需要查询不同的内容 Uri 吗?任何帮助将不胜感激。

编辑:澄清一下,我完全知道这是一个不受支持的内容提供商。但是,由于没有支持的方式来执行此操作,我完全愿意在每部手机/每个操作系统版本的基础上进行测试和支持。为了让讨论保持正轨,假设这个问题特定于 HTC Dream (G1) 或 HTC Magic (MyTouch) 上的 Android 1.6。您将如何在该特定手机和操作系统版本上完成此任务?或者,如果在这些设备上不可能,但在摩托罗拉 Droid 上的 Android 2.0 上是可能的,那么我会发现这些信息也很有帮助。但无论如何,让我们继续讨论如何以受支持或不受支持的方式完成此任务,而不是让它演变成关于我们应该如何远离 API 不支持的事情的讨论,这是我发现 Android 讨论组中充满的东西,我觉得它几乎没有提供任何帮助。如果我使用的是不受支持的方法,那很好,请告诉我完成该任务的受支持方法。如果没有支持的方法,那么为什么 API 支持允许我通过 android.permission.READ_SMS 请求读取短信的权限?

4

1 回答 1

5

这些是我过去使用的内容 uri。您将不得不摆弄您返回的值,并且距离获得 MMS 的各个部分还有很长的路要走,但希望它会有所帮助。

// root URI for MMS messages
static final String MMS_CONTENT_URI = "content://mms";

// root URI for MMS and SMS threads
public static final String MMS_SMS_CONTENT_URI = "content://mms-sms";

// URI of MMS inbox
public static final String RECEIVED_MMS_CONTENT_URI = MMS_CONTENT_URI + "/inbox";

// URI where sent MMSes are stored
public static final String SENT_MMS_CONTENT_URI = MMS_CONTENT_URI + "/sent";

// URI where sent MMSes are stored
public static final String MMS_PART_URI = MMS_CONTENT_URI + "/part";

// URI for incoming SMSes (also triggers on MMSes)
public static final String SMS_INBOX_URI = "content://sms/inbox";
于 2011-02-07T19:32:43.927 回答