2011-01-17 6 views
2

Ich spiele mit einer kleinen Benachrichtigungs App herum. Meine grundlegenden Anforderungen sind: Wenn eine SMS eingeht, schalten Sie die LED ein. Wenn es gelesen wird, schalten Sie es aus. Der erste Teil scheint einfach genug: Ich habe ein BroadcastReceiver mit folgendem in meinem Manifest:Gibt es eine gute Möglichkeit zu sagen, wenn eine SMS auf Android gelesen wird?

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

jedoch der zweite Teil komplizierter erwiesen hat. Derzeit habe ich einen Dienst, der startet, wenn eine Nachricht eingeht Es läuft ein TimerTask alle 15 Sekunden, die diesen Code ausgeführt wird.

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; 

Es scheint gut zu funktionieren. Wenn die Zählung 0 ist, annulliere ich die TimerTask und stoppe den Dienst. Ich bin jedoch besorgt über die Akkulaufzeit. Gibt es eine allgemeine Benachrichtigung für die Anzahl der ungelesenen Nachrichten? Oder einen besseren Weg?

Antwort

3

Sie können ContentObserver verwenden. Ich nehme an, wenn eine neue Nachricht in den SMS-Posteingang kommt, erhalten Sie eine Benachrichtigung (durch Inhaltsbeobachter), auf der anderen Seite, wenn eine SMS gelesen wurde, wird sie aus dem Posteingang entfernt, und Sie erhalten eine weitere Benachrichtigung.

ps, ​​Nutzung ContentObserver auf Inhalt Beobachtung: // sms/Posteingang

+1

Nach einigen Experimenten hatte ich ContentObserver auf Inhalte zu verwenden: // mms-sms/für sie zu arbeiten, aber es scheint zu funktionieren richtig. Vielen Dank! – mmebane

Verwandte Themen