2011-01-17 14 views
2

小さな通知アプリで遊んでいます。私の基本的な要件は次のとおりです。SMSが着信すると、LEDが点灯します。読んだら、それをオフにしてください。最初の部分は簡単に十分なようだ:私は私のマニフェストに次のようにBroadcastReceiverがありますSMSがAndroidでいつ読み込まれるかを確認する良い方法はありますか?

<intent-filter> 
    <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
</intent-filter> 

しかし、第二部では、よりトリッキーであることが証明されました。 。十分に動作するようです

int count = 0; 

Uri providerURI = Uri.parse("content://sms"); 
Cursor cursor = this.getContentResolver().query(providerURI, null, "read=0", null, null); 

if(cursor != null) { 
    try { 
     count = cursor.getCount(); 
    } 
    finally { 
     cursor.close(); 
    } 
} 

return count; 

:現在、私はメッセージが入って来たときに起動するサービスを持っていることは、このコードを実行TimerTask 15秒ごとに実行されます。カウントが0の場合、TimerTaskをキャンセルしてサービスを停止します。しかし、私はバッテリーの寿命に懸念しています。未読メッセージの数が変更された場合の一般的な通知はありますか?またはこれを行うためのより良い方法は?

答えて

3

ContentObserverを使用できます。私は、新しいメッセージがSMS受信ボックスに来ると、あなたは通知を(コンテンツオブザーバーによって)受け取るでしょう、一方で、SMSが読み込まれると、受信トレイから削除され、別の通知がもらえます。それを動作させるために/ // MMS-SMS、それが働いているように見えるん:

PSは、使用ContentObserverは内容に観察:// SMS /受信トレイ

+1

いくつかの実験の後、私は内容にContentObserverを使用していました正しく。ありがとう! – mmebane

関連する問題