如何将每个联系人的SMS消息计数到textview中?

时间:2012-05-14 09:03:03

标签: android count sms contacts message

我有一个 listview ,可以显示设备上的联系人。我尝试做的是将我的设备从每个联系人收到的短信数量显示在我的列表视图中的文本视图中。我只能通过以下代码在收件箱中显示条短信:

        // gets total count of messages in inbox
        String folder = "content://sms/inbox";
        Uri mSmsQueryUri = Uri.parse(folder);
        String columns[] = new String[] {"person", "address", "body", "date","status"}; 
        String sortOrder = "date ASC"; 
        Cursor c = context.getContentResolver().query(mSmsQueryUri, columns, null, null, sortOrder);

        textview.setText(c.getCount());

上面代码的问题是,对于listview中的每一行,这只显示总数。如何将总数分配给它的相应联系人?

如果我的收件箱中有 100封邮件,最终结果是这样的: 联系人:

Foo Manchuu:25

Bar Bee:15

Sna Fuu:10

John Doe:50

2 个答案:

答案 0 :(得分:3)

Uri SMS_INBOX = Uri.parse("content://sms/conversations/");

Cursor c = getContentResolver().query(SMS_INBOX, null, null, null, null);

    startManagingCursor(c);
    String[] count = new String[c.getCount()];
    String[] snippet = new String[c.getCount()];
    String[] thread_id = new String[c.getCount()];

    c.moveToFirst();
    for (int i = 0; i < c.getCount(); i++) {
        count[i] = c.getString(c.getColumnIndexOrThrow("msg_count"))
                .toString();
        thread_id[i] = c.getString(c.getColumnIndexOrThrow("thread_id"))
                .toString();
        snippet[i] = c.getString(c.getColumnIndexOrThrow("snippet"))
                .toString();
        Log.v("count", count[i]);
        Log.v("thread", thread_id[i]);
        Log.v("snippet", snippet[i]);
        c.moveToNext();
    }

查看日志并解决问题。不要重新发布相同的问题:How do I display the count of text messages received from a contact?

答案 1 :(得分:1)

我可能会将count(person) AS cnt添加到columns String数组中,然后我会将person添加为groupBy方法的query参数。

修改

正如 Jens 所指出的,消息传递ContentProvider不支持GROUP BY范例。

您可以做的是在应用程序启动时创建自己的内存数据库(http://www.sqlite.org/inmemorydb.html)以及从中感兴趣的复制粘贴(查询插入)消息系统消息传递数据库到您的内存数据库。 (注意!如果内存不足并且您有大量的消息感兴趣,这可能会出错)。既然你是内存数据库中的上帝,你可以根据自己喜欢的任何奇怪的SQL查询查询它...