2017-05-04 1 views
1

私は、Android SMSコンテンツプロバイダへの変更をリッスンするバックグラウンドサービスを持っています。私は私のサービスが記録したメッセージの最後に記録されたIDを保存し、それを使用して、サービスが停止/強制終了されたときに送信されたメッセージの数を探したい。特定の時間の後に送信されたSMSを取得する

サービスが再び開始され、別のメッセージが送信されると、最後に記録されたメッセージのタイムスタンプを使用します。私はこれを行うために以下のコードを使用します。私の問題は、カーソルが再起動する前にサービスが強制終了されたときに送信されるメッセージの数に関係なく、カーソルが常に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

私はSMSテーブルに 'lastMessageId'を問い合わせてタイムスタンプを読みます。コードも同様に更新されます。私は1つのメッセージが最近のものだと思います。 – 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列を確認してください。

関連する問題