首先,我发现这个 answer 特别有用。然而,这让我想知道如何找到这些信息。
我似乎无法弄清楚如何迭代收件箱中的所有邮件。我当前的解决方案使用 Uri.parse("content://mms-sms/conversations")
,其中我使用了“_id”和“ct_t”。但是,尽管有 30 条消息(其中 20 条在保存对话线程中,而其他消息在其他两个对话之间分配),但我似乎只能在手机中找到这三个对话。对于这样的声明 content://mms-sms/conversations
是有意义的。但是,其他提供商似乎只处理 SMS 或 MMS。有没有办法以这种方式迭代整个消息列表,我用其他东西替换 "content://mms-sms/conversations"
?
public boolean refresh() {
final String[] proj = new String[]{"_id","ct_t"};
cursor = cr.query(Uri.parse("content://mms-sms/conversations"),proj,null,null,null);
if(!(cursor.moveToFirst())) {
empty = true;
cursor.close();
return false;
}
return true;
}
我用下一个函数迭代消息
public boolean next() {
if(empty) {
cursor.close();
return false;
}
msgCnt = msgCnt + 1;
Msg msg;
String msgData = cursor.getString(cursor.getColumnIndex("ct_t"));
if("application/cnd.wap.multipart.related".equals(msgData)) {
msg = ParseMMS(cursor.getString(cursor.getColumnIndex("_id")));
} else {
msg = ParseSMS(cursor.getString(cursor.getColumnIndex("_id")));
}
if(!(cursor.moveToNext())) {
empty = true;
cursor.close();
return false;
}
return true;
}
最佳答案
可以使用 content://mms-sms/complete-conversations
URL 在单个查询中获取所有 MMS 和 SMS 消息。出于某种奇怪的原因,在 Uri
class 中没有 Telephony.MmsSms
字段,但它至少从 Froyo 开始就可用了。
使用这个单一查询肯定比单独查询表更有效,并且任何需要完成的排序、分组或过滤肯定会比操作 Java 集合更快地由 SQLite 引擎执行。
请注意,您必须为此查询使用特定的 projection
。您不能传递 null
或 *
通配符。此外,建议在您的 MmsSms.TYPE_DISCRIMINATOR_COLUMN
中包含 "transport_type"
( projection
) - 其值为 "mms"
或 "sms"
- 以轻松区分消息类型。selection
、 selectionArgs
和 orderBy
参数像往常一样工作,并且 null
可以为它们中的任何一个或全部传递。
关于android - 在android中查找和迭代所有短信/彩信,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36001339/