私のウィジェットは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を宣言しようとしたことにも注意してください。
前もって感謝します!
よろしく、ロドリゴ。