首先,我发现这个 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" - 以轻松区分消息类型。
selectionselectionArgsorderBy 参数像往常一样工作,并且 null 可以为它们中的任何一个或全部传递。

关于android - 在android中查找和迭代所有短信/彩信,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36001339/

10-09 09:40