1

我在我的应用程序中设置了一个 MMS 内容观察器,只要有新的 MMS 消息到达,它就会被触发。然后它查询“content://mms/inbox”并检索所有未读消息。问题是 MMS 部分到达(文本和任何音频/图片/视频附件单独进入)或者至少内容观察者得到触发多次(每当下载每个彩信部分时)。所以,当第一部分进入时,我的应用程序检测到它,但除了主题之外真的什么都没有。几秒钟后,下一部分进入,我的应用程序将它添加到第一个。因此,如果有 3 个或更多部分,这会变得很麻烦,因为用户永远不知道是否还会有更多的部分。

所以,我想等到所有部件都进来后再通知用户有一个新的彩信并向他们展示。但是,我在内容提供商中没有看到任何内容表明家庭的许多部分将通过。那么是否有我遗漏的东西,或者任何其他方式来确定总共有多少部分?(不只是在随机间隔上进行while循环检查是否有另一部分进入)

4

1 回答 1

0

您要做的是检查onChange_id中 uri 中的最后一项。content://mms/inbox

您需要存储之前的_id,并cursor.moveToLast()在查询后将其与游标的最后一项()的_id进行比较content://mms/inbox。如果_id相同,您可以选择忽略/丢弃上一条消息,而是存储这条消息。

您可以保存最后一条消息的 id 并将其与curin返回的消息的 id 进行比较onChange。然后,如果 id 相同,您可以简单地忽略该消息。

// might contain mistakes, but you'll get the idea:
protected void querySMS() {
    Cursor cur = getContentResolver().query(u, null, null, null, null);
    cur.moveToNext(); 
    if (lastId == cur.getLong(cur.getColumnIndex("_id")))
        return;
    lastId = cur.getLong(cur.getColumnIndex("_id"));
    ... //continue as it was
}
于 2013-08-24T11:21:35.647 回答