Ich habe einen Hintergrunddienst, der Änderungen an Android SMS-Inhaltsanbieter abhört. Ich speichere die zuletzt aufgezeichnete ID der Nachricht, die mein Dienst aufgezeichnet hat, und benutze sie. Ich möchte die Anzahl der Nachrichten finden, die gesendet wurden, als der Dienst gestoppt/erledigt war.Abrufen von SMS nach einer bestimmten Zeit gesendet
Wenn also der Dienst erneut gestartet wird und eine andere Nachricht gesendet wird, möchte ich den Zeitstempel der letzten aufgezeichneten Nachricht verwenden. Ich verwende den folgenden Code, um dies zu tun. Mein Problem ist, dass der Cursor immer 1 Datensatz zurückgibt, unabhängig davon, wie viele Nachrichten gesendet wurden, als der Dienst vor dem Neustart beendet wurde.
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;
Alle Zeiger wären hilfreich. Lassen Sie mich wissen, ob es auch einen alternativen Ansatz gibt.
Bearbeiten: Hinzufügen von Code zum Abrufen der 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)));
}
kompletten Source-Code für diese Klasse befindet sich unter: https://github.com/midhunhk/message-counter/blob/unicorn/messageCounter/src/main/java/com/ae/apps/messagecounter/observers/SMSObserver.java
Sind Sie sicher, dass Sie den richtigen Zeitstempel haben? Wie und wann erhalten Sie 'lastMessageTimeStamp'? Haben Sie diesen Wert überprüft, wenn der obige Code ausgeführt wird? Welches ist die einzige Nachricht, die Sie von dieser Abfrage erhalten? Wird immer die neueste gesendet? –
Ich frage die SMS-Tabelle mit der 'lastMessageId' ab und lese den Zeitstempel. Wird den Code damit auch aktualisieren. Ich denke, dass die eine Nachricht die jüngste ist, wird das bestätigen. – midhunhk