38 votes

Widget Android non mis à jour

Je suis en train de mettre en œuvre un widget simple pour l'affichage sur l'écran d'accueil. Le problème que je rencontre est que onUpdate ne doit être appelé qu'une seule fois quand j'ai installer le widget. La configuration ci-dessous. Note: je ne vais pas laisser période de mise à jour à 20 secondes que je sais que ce serait tuer la batterie (juste les tests).

Configuration:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
   android:minWidth="294dp"
   android:minHeight="72dp"
   android:updatePeriodMillis="20000"
   android:initialLayout="@layout/my_custom_app_widget">`
</appwidget-provider>`

Manifeste Extrait:

<receiver android:name="MyCustomWidgetProvider">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
        android:resource="@xml/my_custom_app_widget_info" />
</receiver>

Je suis en observant le comportement suivant quand j'essaie d'installer le widget: Dans mon WidgetProvider classe sur onReceive est appelé ensuite onEnabled puis onReceive, puis onUpdate.

Après que le widget affiche et onUpdate n'est jamais appelé de nouveau. J'ai aussi vérifier les paramètres de la provder quand onUpdate est appelé et tout mis en XML ci-dessus (par exemple, période de mise à jour) est correct.

69voto

CommonsWare Points 402670

Alors que android:updatePeriodMillis réglé sur 20 secondes, le temps réel minimum est de 30 minutes. Donc, si vous n'avez pas attendu 30 minutes pour voir s'il y a une mise à jour pendant vos tests, vous devrez attendre un peu plus longtemps.

20voto

duduli Points 121

À partir du SDK:

Remarque: Si l'appareil est en veille quand il est temps pour une mise à jour (tel que défini par updatePeriodMillis), l'appareil va se réveiller pour effectuer la mise à jour. Si vous n'avez pas de mise à jour plus d'une fois par heure, ce ne sera probablement pas causer des problèmes importants pour la vie de la batterie.

Si, toutefois, vous devez mettre à jour plus fréquemment et/ou vous n'avez pas besoin de mise à jour alors que l'appareil est en veille, puis la place, vous pouvez effectuer des mises à jour basé sur une alarme qui ne sera pas réveiller l'appareil.

Pour ce faire, définissez une alarme avec une Intention que votre AppWidgetProvider reçoit, à l'aide de l' AlarmManager. Définir le type d'alarme soit ELAPSED_REALTIME ou RTC, qui ne délivre que de l'alarme lorsque l'appareil est éveillé. Puis définissez updatePeriodMillis de zero ("0").

Et quand SDK 1.6+:

Remarque: les Mises à jour demandées updatePeriodMillis ne sera pas livré plus d'une fois toutes les 30 minutes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X