Aktualisierung des App-Widgets mit AlarmManager

7

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%     
doydoy 29.03.2011, 18:00
quelle

2 Antworten

12
  

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

  • ignorieren
  • 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

CommonsWare 29.03.2011, 18:56
quelle
12

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%     
petrnohejl 14.01.2013 13:10
quelle