Есть ли хороший способ узнать, когда SMS прочитано на Android? - PullRequest
2 голосов
/ 17 января 2011

Я играю с небольшим приложением уведомлений.Мои основные требования: когда приходит SMS, включи светодиод.Когда он будет прочитан, выключите его.Первая часть кажется достаточно простой: у меня есть BroadcastReceiver со следующим в моем манифесте:

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

Однако вторая часть оказалась более хитрой.В настоящее время у меня есть служба, которая запускается всякий раз, когда приходит сообщение. Она запускает TimerTask каждые 15 секунд, которая запускает этот код:

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;

Кажется, это работает достаточно хорошо.Когда счетчик равен 0, я отменяю TimerTask и прекращаю обслуживание.Тем не менее, я беспокоюсь о времени автономной работы.Существует ли какое-либо общее уведомление об изменении количества непрочитанных сообщений?Или есть ли лучший способ сделать это?

1 Ответ

3 голосов
/ 17 января 2011

Вы можете использовать ContentObserver.Я полагаю, что когда новое сообщение поступит в почтовый ящик для SMS-сообщений, вы получите уведомление (от обозревателя контента), с другой стороны, когда SMS-сообщение будет прочитано, оно будет удалено из почтового ящика, а также вы получите другое уведомление.

ps, используйте ContentObserver, наблюдая за контентом: // sms / inbox

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...