WidgetのIntent.putExtraについて
Widgetで簡易ランチャを作ってみたが、いくつかの異なるViewをクリックするとそれぞれ異なったパラメータを渡したいのにうまくいかない。
9個のViewに対してそれぞれIntentを作成して、putExtraでパラメータを設定してServiceに飛ばすという感じを最初以下のようにしたらgetExtraをしても設定したパラメータが取れない。
Intent clickIntent = new Intent[9];
PendingIntent pendingIntent = new PendingIntent[9];
for(int i = 0; i < clickIntent.length; i++){
clickIntent[i] = new Intent(ACTION_CLICK);
clickIntent[i].putExtra(KEY, i);
pendingIntent[i] = PendingIntent.getService(getApplicationContext(), 0, clickIntent[i], 0);
views.setOnClickPendingIntent(icons[i], pendingIntent[i]);
}
情報を探して以下のように修正
Intent clickIntent = new Intent[9];
PendingIntent pendingIntent = new PendingIntent[9];
for(int i = 0; i < clickIntent.length; i++){
clickIntent[i] = new Intent(ACTION_CLICK);
clickIntent[i].putExtra(KEY, i);
pendingIntent[i] = PendingIntent.getService(getApplicationContext(), i(←ここ①), clickIntent[i], PendingIntent.FLAG_UPDATE_CURRENT(←ここ②));
views.setOnClickPendingIntent(icons[i], pendingIntent[i]);
}
①が原因だったみたいですね。
でもAndroid DevelopersのリファレンスにはPendingIntent.getServiceの第②引数の説明は以下のように書いてある。
Private request code for the sender (currently not used).
not usedって書いてあるから適当でいいと思ったのに…
参考URL
http://syun-blog.cocolog-nifty.com/blog/2010/04/androidappwidge.html