Android小部件的固定更新频率

时间:2013-07-05 12:28:37

标签: java android android-widget

为了拥有Widget,我们需要维护一个描述窗口小部件属性的XML文件(AppWidgetProviderInfo),例如:大小或固定更新频率如下:

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="160dp" 
    android:minHeight="72dp"
    android:initialLayout="@layout/widget_layout"
    android:updatePeriodMillis="1800000"
    android:configure="android.project.WidgetConfigure" >

</appwidget-provider>

并在AndroidManifest.xml中维护App Widget配置。

<meta-data
        android:name="android.appwidget.provider"
        android:resource="@xml/widget_info" />
 </receiver>

我知道我们无法修改updatePeriodMillis。以编程方式,我们需要使用AlarmManager。 (Android Widget set android:updatePeriodMillis programmatically

但是如何以编程方式从xml文件中读取该值。有什么办法吗?

附录:

try {
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
        AppWidgetProviderInfo info = appWidgetManager.getAppWidgetInfo(R.xml.widget_info);
        System.out.println("Time: " + info.updatePeriodMillis);
    } catch(Exception err) {
        err.printStackTrace();
    }

如果我在Activity中使用此代码,它会在catch中返回NullPointerException。

1 个答案:

答案 0 :(得分:1)

updatePeriodMillis是系统使用的值,以便在该时间段到来之后向您发送正确的广播。 为什么要读取它并在同一时间触发AlarmManager意图?

修改后: 你传的是错误的“id”;您应该传递实际的小部件ID,而不是其XML元数据ID。 正如我在上一篇评论中所写,试试这个: AppWidgetManager.getInstance(),然后使用AppWidgetManager.getAppWidgetIds()检索您的小部件ID,然后继续讨论(AppWidgetManager.getAppWidgetInfo() ...)