1

システム 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 を実行しているエミュレーターでこれをテストしました。

4

2 に答える 2

1

エミュレータ ウィジェットの更新は少し危険なようです。これには 2 つの既知の問題があります。

  1. updateAppWidget(...)呼び出しは、少なくとも 1 回再起動されたエミュレータでのみ機能する場合があります
  2. 一度に複数のエミュレータを実行すると、ウィジェットの更新が妨げられる場合があります
于 2012-06-26T11:15:09.010 に答える
0

さらに多くの実験を行うと、エミュレーター内でのウィジェットの更新が壊れていることがわかります。

新しいコードをデプロイしても、既存のウィジェットは変更されません!

Androidx86を使用したテストでは、問題がエミュレーターに限定されていることが示唆されているため、代わりにウィジェットのテストに使用すると思います...

于 2011-10-06T15:58:50.430 に答える