检索在特定时间后发送的SMS

时间:2017-05-04 04:22:05

标签: android sms android-sqlite

我有一个后台服务,可以收听Android SMS内容提供商的更改。我存储了我的服务记录并使用它的消息的最后记录ID,我想查找服务被停止/杀死时发送的消息数。

因此,当再次启动服务并发送另一条消息时,我想使用最后记录的消息的时间戳。我使用下面的代码来做到这一点。我的问题是,无论在重新启动服务之前服务被杀死了多少消息,光标总是返回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)));
}

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

1 个答案:

答案 0 :(得分:0)

我能够通过使用不同的方法来解决这个问题。

似乎当我们在问题中查询表[CARVEOUT] 时,它只返回1行,这是最后发送的消息。

SMSManager.SMS_URI_SENT

我查询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列为空,表示发送的邮件。