Android Widget未更新

pho*_*gel 37 android widget android-appwidget

我正在尝试实现一个简单的小部件,以便在主屏幕上显示.我遇到的问题是onUpdate只在我安装小部件时被调用一次.配置如下.注意:我不会将更新周期留在20秒,因为我知道这会消耗电池(只是测试).

组态:

<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>`
Run Code Online (Sandbox Code Playgroud)

清单摘录:

<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>
Run Code Online (Sandbox Code Playgroud)

我在安装窗口小部件时会观察到以下行为:在onReceive上的我的WidgetProvider类中调用onEnabled然后onReceive,然后调用onUpdate.

之后,窗口小部件显示,并且永远不会再次调用onUpdate.我还会在调用onUpdate时检查提示器的设置,并且上面用XML设置的所有内容(例如更新周期)都是正确的.

Com*_*are 68

虽然你已经android:updatePeriodMillis设置为20秒,最小的实际时间是30分钟.因此,如果您没有等待30分钟,看看测试期间是否有更新,则需要等待一段时间.

  • 如果您正在构建API:这不是您的方法.如果对值范围有限制,请通过在编译时或最坏情况运行时失败使消费者完全清楚. (4认同)
  • 谢谢.我一行一行地通过文档,他们没有提到这一点.然而,基于你的答案我dugfurther并注意到我正在看1.5文档.记录最小值,如果需要更高的更新频率,显然有一种警报方法.谢谢. (3认同)
  • 如何关于时钟或天气更新小部件?它们如何更新. (2认同)

小智 20

从SDK:

注意:如果设备在需要更新时(如定义的那样updatePeriodMillis)处于睡眠状态,则设备将被唤醒以执行更新.如果每小时更新不超过一次,这可能不会导致电池寿命出现严重问题.

但是,如果您需要更频繁地更新和/或在设备处于睡眠状态时不需要更新,则可以根据不会唤醒设备的警报执行更新.

为此,请使用以下命令设置您AppWidgetProvider收到的Intent警报AlarmManager.将警报类型设置为ELAPSED_REALTIMERTC,仅在设备唤醒时发出警报.然后设置updatePeriodMilliszero("0").

当SDK 1.6+时:

注意:请求的更新updatePeriodMillis不会每30分钟发送一次以上.