检索特定时间后发送的短信
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,它表示已发送的消息。
我有一个后台服务,可以监听 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,它表示已发送的消息。