2010-12-17 4 views
2

Ich baue eine App, die auf Änderungen im CallLog.Calls-Inhaltsanbieter wartet. Daher werden alle Änderungen an diesem Inhaltsanbieter den Beobachter der App benachrichtigen, der die geänderten Daten einfügen wird.Auf Änderungen in CallLog.Calls warten

Aber es gibt ein Problem, die App wird benachrichtigt, wenn es nicht ausgeführt wird, dh die App erfasst nicht die Daten geändert hat, während nicht ausgeführt wird.

Also meine Frage ist, gibt es eine Möglichkeit, die Daten zu erfassen, die sich geändert haben, während die App nicht lief? So habe ich zum Beispiel 8 Anrufe getätigt und die App lief nicht, so dass dem CallLog.calls Content Provider 8 neue Daten hinzugefügt wurden. Gibt es eine Möglichkeit, diese 8 neuen Daten zu erfassen, sobald die Anwendung startet?

Danke!

Antwort

1

Wenn es einen Intent gibt, der bei einem eingehenden Anruf ausgelöst wird, könnten Sie Ihre App dazu bringen, mit einem BroadcastReceiver zu antworten und in Ihrem Manifest einen IntentFilter zu erstellen.

oder Abfrage nur den Anbieter, wenn die App startet ...

Edit:

ACTION_PHONE_STATE_CHANGED ist eine TelephonyManager Absicht Sie hören können, und überprüfen, ob es TelephonyManager.CALL_STATE_RINGING ist.

+0

Tatsächlich habe ich einen ContentObserver, der auf einen eingehenden oder ausgehenden Anruf ausgelöst wird. Aber die App hört nur auf die Benachrichtigung, wenn sie läuft. Wenn es nicht läuft, hört es nicht zu, also werden die Anrufe, die ich gemacht habe, von der App verpasst, dh die App erfasst die Daten nicht. Ich habs? Also suche ich nach einer Lösung, die prüfen oder hören kann, sobald die App läuft. Ich versuchte, die Größe des Anbieters abzufragen, indem ich zwei Variablen deklarierte, eine mit der letzten Größe des Anbieters und eine andere mit der aktuellen Größe. Wenn ich die App einmal ausführe, vergleiche ich beide. Ist es eine gute Lösung? – rogcg

+0

Wenn es keinen eingehenden Anruf gibt Absicht, die Sie beantworten können, um zu überprüfen, ob die Anrufdatenbank neue Zeilen enthält, scheint für mich vollkommen akzeptabel zu sein. Ich bin sicher, dass es einen eingehenden Anruf Intent obwohl. Wenn Sie einen Empfänger im App-Manifest mit einem Intent-Filter registriert haben, der diese Absicht angibt, wird Ihre App gestartet. Wahrscheinlich ist es am besten, wenn Sie Ihre App dazu bringen, einen Dienst zu starten, der im Hintergrund funktioniert. Überprüfen Sie die Intent-Klasse und die TelephonyManager-Klasse, um festzustellen, ob eine Absicht vorliegt. – techiServices

+0

Ich denke, ich muss einen Service implementieren. – rogcg