システム TIME_TICK でトリガーする WidgetProvider と Service を作成しました。
ウィジェットを更新するには、次のようなコードを使用します (わかりやすくするために編集されているため、タイプミスがある可能性があります)
Log.d("xxx","Updating");
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
views.setTextViewText(R.id.appwidget_text, "Some Text" + System.currentTimeMillis());
ComponentName thisWidget = new ComponentName(context, SWClockWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(thisWidget, views);
私の携帯電話 (2.2 を実行している HTC Desire) では完璧です。ウィジェットは毎分更新されます。
エミュレーター (2.2 を実行) では、ログ メッセージが表示されます (サービスが動作しているなど) が、ウィジェットは更新されません。
ここで、そのコードを 2 つの場所で呼び出します。プロバイダーの onUpdate メソッドから (ウィジェットが最初に表示されたときにウィジェットに何かを入れるため)、およびサービスのリスナーから (ウィジェットを更新するため) 呼び出します。
ここに奇妙なビットがあります-私のマニフェストでは、最初にこのようにサービスを宣言しました
サービス android:name=".SWClockWidgetService"
パッケージを明示的に言及するように変更したとき(もちろん、プロバイダーのパッケージと同じです)
サービス android:name="com.somewhatdog.swclockwidget.SWClockWidgetService"
最初の更新 (プロバイダー onUpdate から呼び出される) は機能しますが、サービスのリスナーからの後続の呼び出しは機能しません!?
注:もともとサービスをプロバイダーの内部クラスにしましたが、それは電話またはエミュレーターでは機能しませんでした-それが関連しているかどうかはわかりません...
とにかく-私は当惑しています-電話とエミュレーターで同じAndroid-1つは機能し、1つは機能しません(つまり、これが他のデバイスで機能する可能性は控えめに言っても不機嫌です??)
私はここで少し迷っています - どんなアドバイスでもいいです。
ps 1.6 no joy を実行しているエミュレーターでこれをテストしました。