我有一个后台服务,可以收听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)));
}
答案 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
列为空,表示发送的邮件。