1

为了拥有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 以编程方式设置 android:updatePeriodMillis

但是如何以编程方式从 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。

4

1 回答 1

1

updatePeriodMillis是系统使用的值,以便在该时间段到来时向您发送适当的广播。你为什么要AlarmManager在同一时间阅读它并触发一个意图?

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

于 2013-07-05T12:35:20.913 回答