2017-05-04 80 views
1

我有一个后台服务,用于监听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

+0

你确定你有合适的时间戳吗?也就是说,如何以及何时得到'lastMessageTimeStamp'?上面的代码运行时你检查过这个值吗?哪一条消息是从该查询中获得的?它总是最近发送的吗? –

+0

我用'lastMessageId'查询SMS表并读取时间戳。也将更新代码。我认为最近的一个信息就是证实这一点。 – midhunhk

回答

0

我可以用不同的方法来解决这个问题。

看起来像我们查询表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列作为空,其表示被发送的消息。