0

私のウィジェットは3分ごとにインターネットからデータを取得します。一部はウィジェットに直接表示され、その他はSharedPreferencesに保存されるため、ユーザーがウィジェットをタップすると、その情報がダイアログとして表示されます。複数のウィジェットを実行している場合、ログをクリックしたウィジェットに関係なく、appWidgetIdは常にそのうちの1つからのものであると表示されます

私の問題は、ウィジェットのsetOnClickPendingIntent()を宣言する方法にあるようです。データをフェッチする直前にサービス内でこれを行っています。同じサービスがすべての(ウィジェット)AlarmManagerによって実行されるため、すべてのウィジェットは最後に実行されたサービスからPendingIntentを取得します。

public class WidgetService extends Service
{
@Override
    public void onStart(Intent intent, int startId) 
    {
          Intent intentUmbrales = new Intent(context, LaunchUmbralesDialog.class);
          intentUmbrales.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
          PendingIntent pendingIntentUmbrales = PendingIntent.getActivity(context,0,intentUmbrales,0);

          // Get the layout for the App Widget and attach an on-click listener to the button
          RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);

        //  views.setOnClickPendingIntent(R.id.energia_widget, pendingIntentImei);
          views.setOnClickPendingIntent(R.id.imageLogo_widget, pendingIntentUmbrales);
        //..then I fetch data, store the rest in SharedPreferences and update widget remoteViews
    }
}

どうすればこれを回避できますか?ウィジェットをオーバーラップさせて、ウィジェットごとに個別の「ボタン」を作成するにはどうすればよいですか?また、AppWidgetProviderのonUpdate()メソッド(メソッドによって指定された配列からのすべてのappWidgetIdのループ内)でこれらのPendingIntentsを宣言しようとしたことにも注意してください。

前もって感謝します!

よろしく、ロドリゴ。

4

1 に答える 1

0

.setOnClickPendingIntent()を宣言するときは、最初にインテントに追加します

Uri data = Uri.withAppendedPath(
                    Uri.parse(URI_SCHEME + "://widget/id/")
                    ,String.valueOf(appWidgetId));
                intent.setData(data);

各ウィジェットが一意のIDを取得し、混乱しないようにします。

于 2012-07-05T17:56:46.993 に答える