Ich versuche, ein Widget häufiger zu aktualisieren als die 30-Minuten-Beschränkung, die von den 1.6docs auferlegt wird. Nachdem ich fast jeden Post in SO und die Entwickler-Dokumentation und verschiedene andere Quellen gelesen hatte, dachte ich, ich hätte einen Punkt erreicht, wo ich es implementieren könnte. Also habe ich es versucht und gescheitert. Seit damals habe ich noch mehr Foren und Lösungen durchforstet, und ich kann nicht scheinen, es zu aktualisieren.
Ich habe eine Update-Klasse, die den AlarmManager einstellt:
%Vor%Das hat dazu geführt, dass mein onReceive in meiner Widget-Klasse häufig ausgelöst wird (ich habe einen Toast, um zu sehen, wenn es ausgelöst wird), aber es enthält keine Absicht (der Toast soll dies so anzeigen, wie sie empfangen wurden, aber leer ist).
Ich kann es nicht herausfinden (ich bin ein relativer Neuling - 2 Monate langsamer Android-Entwickler) und schätze jede Einsicht, die ihr habt.
here meine Widget-Klasse als Referenz:
%Vor%Ich habe eine Update-Klasse, die den AlarmManager einstellt:
Nein, das tust du nicht. AlarmManager
wird nirgends im Code-Snippet angezeigt.
Sie tun haben einen Verweis auf AlarmManager
im zweiten Code-Snippet. Probleme dort sind:
Sie legen bei jedem Aktualisieren des App-Widgets einen neuen Wiederholungsalarm fest
Sie legen eine 5-Sekunden-Frequenz für den Alarm fest, was völliger Wahnsinn ist
Sie legen eine 5-Sekunden-Frequenz für einen _WAKEUP
-Alarm fest, was meiner Meinung nach Grund für Ihre Festnahme in einigen Gerichtsbarkeiten ist.
Sie haben eine sinnlose Methode onReceive()
, auch wenn Sie das temporäre Toast
Sie gehen davon aus, dass in Intent
eine Aktionszeichenfolge vorhanden ist. Sie geben jedoch keine Aktionszeichenfolge an, wenn Sie die Toast
erstellen, die Sie in Intent
abgelegt haben. für den Alarm
Ihr Code bezieht sich auf statische Datenelemente einer PendingIntent
-Klasse, aber es ist sehr wahrscheinlich, dass diese alle leer sind / null ... oder zumindest wären sie es, wenn Sie ein vernünftiges Verhalten hätten Häufigkeit des Alarms
Das ist meine Lösung, wie man das Widget öfter als die 30 Minuten automatisch aktualisiert. Ich benutze AlarmManager. Bevor Sie den AlarmManager zum Aktualisieren von Appwidget verwenden, vergewissern Sie sich, dass Sie wissen, was Sie tun, da diese Technik die Batterie des Geräts entleeren könnte.
Lesen Sie mehr über Widget-Aktualisierung in Android doc - insbesondere über den Parameter updatePeriodMillis.
Dies ist Teil meiner Manifest.xml. Ich definiere benutzerdefinierte Aktion AUTO_UPDATE.
%Vor%Dies ist Teil meines AppWidget.java. In onReceive-Methode handle ich meine benutzerdefinierte Aktion AUTO_UPDATE. Mit den Methoden onEnabled und onDisabled starte / stoppe ich den Alarm.
%Vor%Dies ist mein AppWidgetAlarm.java, der den Alarm startet / stoppt. Alarm Manager sendet Broadcast an AppWidget.
%Vor%Tags und Links android android-widget alarmmanager