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 でアプリ ウィジェットの構成を維持します。

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

を編集できないことはわかっていますupdatePeriodMillis。プログラムで、AlarmManager を使用する必要があります。( Android ウィジェットは 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();
    }

このコードをアクティビティで使用すると、キャッチで NullPointerException が返されます。

4

1 に答える 1

1

updatePeriodMillisは、その期間が来たら適切なブロードキャストを送信するためにシステムが使用する値です。AlarmManagerそれを読んで、まったく同時にインテントをトリガーしたいのはなぜですか?

編集後: 間違った「ID」を渡しています。XML メタデータ ID ではなく、実際のウィジェット ID を渡す必要があります。前回のコメントで書いたように、これを試してください: AppWidgetManager.getInstance()を使用AppWidgetManager.getAppWidgetIds()して、ウィジェット ID を取得し、説明どおりに続行します ( AppWidgetManager.getAppWidgetInfo()...)

于 2013-07-05T12:35:20.913 に答える