检索特定时间后发送的短信

Retrieve SMS sent after a specific time

我有一个后台服务,可以监听 Android SMS 内容提供商的变化。我存储了我的服务记录并使用它的消息的最后记录 ID,我想找到服务为 Stopped/Killed.

时发送的消息数

所以当服务再次启动并发送另一条消息时,我想使用最后一条记录的消息的时间戳。我使用下面的代码来做到这一点。我的问题是,无论服务在重新启动前被终止时发送了多少消息,光标总是 returns 1 条记录。

String COLUMN_NAME_DATE = "date"
String[] projection = new String[]{COLUMN_NAME_ID, COLUMN_NAME_DATE};

Cursor newMessagesCursor = mContext.getContentResolver().query(
                Uri.parse(SMSManager.SMS_URI_SENT),
                projection,
                COLUMN_NAME_DATE + "> ? ",
                new String[]{String.valueOf(lastMessageTimeStamp)}, null);

int newMessagesCount = (null != newMessagesCursor) ? newMessagesCursor.getCount() : 0;

任何指示都会有所帮助。让我知道是否还有其他方法。

编辑: 添加代码以检索 lastMessageTimeStamp。

Cursor messageCursor = mContext.getContentResolver().query(
        Uri.parse(SMSManager.SMS_URI_SENT),
        projection,
        COLUMN_NAME_ID + "= ? ",
        new String[]{ lastMessageId}, null);

if(null != messageCursor && messageCursor.moveToFirst()) {      
   Long lastMessageTimeStamp = Long.parseLong(messageCursor.getString(messageCursor.getColumnIndex(COLUMN_NAME_DATE)));
}

此 class 的完整源代码位于: https://github.com/midhunhk/message-counter/blob/unicorn/messageCounter/src/main/java/com/ae/apps/messagecounter/observers/SMSObserver.java

我使用不同的方法解决了这个问题。

似乎当我们查询问题中的 table SMSManager.SMS_URI_SENT 时,它只返回 1 行,这是发送的最后一条消息。

Cursor newMessagesCursor = context.getContentResolver().query(
        Uri.parse(SMSManager.SMS_URI_ALL),
        MessagesTableConstants.SMS_TABLE_PROJECTION,
                "person is null and " + MessagesTableConstants.COLUMN_NAME_DATE + "> ? ",
        new String[]{String.valueOf(lastMessageTimeStamp)}, null);

我查询 SMSManager.SMS_URI_ALL 并检查 person 列是否为 null,它表示已发送的消息。