38

我正在尝试实现一个简单的小部件以在主屏幕上显示。我遇到的问题是 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>`

清单摘录:

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

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

之后,小部件将显示,并且永远不会再次调用 onUpdate。当调用 onUpdate 并且上面 XML 中设置的所有内容(例如更新周期)正确时,我还会检查提供者的设置。

4

3 回答 3

70

虽然您已android:updatePeriodMillis设置为 20 秒,但实际最短时间为 30 分钟。因此,如果您在测试期间没有等待 30 分钟来查看是否有更新,则需要再等待一段时间。

于 2010-01-16T16:49:37.457 回答
20
于 2011-08-02T07:00:34.987 回答
2

正如 duduli 所说...使用 alarmManager 向您的 Widget 类发送意图,如果您不知道如何按照本指南操作,它将在其 onReceive 方法中接收它。它对我和其他人有用

于 2017-05-19T09:03:02.927 回答