2017-05-04 78 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列作爲空,其表示被髮送的消息。