Count为单个线程发送了sms消息

时间:2017-03-30 15:58:43

标签: android sms

我正在寻找特定线程中发送的短信息的计数(例如,ID为15)。我发现了这个How do I get the count of SMS messages per contact into a textview?< - 但它并没有解决我的问题,因为它同时计算发送和接收的短信。是否可以只计算发送的消息?我想我可以查询“content:// sms / sent”并浏览每条短信,但我想知道是否有更有效的方法。

由于

1 个答案:

答案 0 :(得分:1)

您可以使用您的主题ID查询Sms.Conversations,并选择将TYPE列限制为MESSAGE_TYPE_SENT的选项。由于您只需要计数,我们可以执行SELECT COUNT()查询,因此不会浪费资源来构建具有未使用值的Cursor。例如:

private int getThreadSentCount(String threadId) {
    final Uri uri = Sms.Conversations.CONTENT_URI
                    .buildUpon()
                    .appendEncodedPath(threadId)
                    .build();
    final String[] projection = {"COUNT(1)"};
    final String selection = Sms.TYPE + "=" + Sms.MESSAGE_TYPE_SENT;

    int count = -1;
    Cursor cursor = null;
    try {
        cursor = getContentResolver().query(uri,
                                            projection,
                                            selection,
                                            null,
                                            null);
        if (cursor != null && cursor.moveToFirst()) {
            count = cursor.getInt(0);
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        if (cursor != null) {
            cursor.close();
        }
    }
    return count;
}

上面使用的Sms类位于android.provider.Telephony类。

import android.provider.Telephony.Sms;

作为参考,Sms.Conversations.CONTENT_URI相当于Uri.parse("content://sms/conversations")Sms.TYPE"type"Sms.MESSAGE_TYPE_SENT2