質問
投稿:2009年11月30日(月)午後5時8分投稿件名:意図的なエクストラによる単純な問題 こんにちは、
ホーム画面用のアプリウィジェットを作成しています。ユーザーがウィジェットをタップすると、ウィジェットに表示されるデータが変更されるようにしようとしています。ただし、異なるデータでウィジェットの複数のインスタンスを開くこともできます。そのため、更新するウィジェットをメソッドに伝えるために、データを変更するために起動されるインテントにエクストラを追加しています。
ここに私が持っている意図があります: Java:
Intent changeData = new Intent("com.tonycosentini.mintdroid.CHANGE_DATA");
changeData.putExtra("widget_id", currentWidgetId);
PendingIntent changeDataPendingIntent = PendingIntent.getBroadcast(this, 0, changeData, 0);
//This will return the correct value, but if I call it in my onreceive() method it won't.
Log.v(TAG, "stored id is: " + changeData.getIntExtra("widget", 0);
これはウィジェットIDを正しく保存しますが、データ変更メソッドが呼び出されると、インテントから読み取られるウィジェットIDが最初のウィジェットインスタンスになります。つまり、すべてのウィジェットを生成するforループがあり、どのウィジェットをタップしても、受信されるウィジェットIDは常に最初のウィジェットの最初のウィジェットIDです。
誰もこれを解決する方法を知っていますか?うまく行かないといいのですが。
読んでくれてありがとう、 トニー
解決
これは、PendingIntentsの既知の問題です。 AndroidがPendingIntentsを比較する場合、Intentのエクストラは比較されないため、異なるエクストラのみを使用して同じ基本インテントを複数回スケジュールすることはできません。現時点では、Intentデータに追加情報を追加するなど、追加以外の方法でIntentを一意にすることによってのみ、これを解決できます。
Google Android Groupでこれについて少し議論しています: http://groups.google.com/group/android-developers/browse_thread/thread/81100da6ddb21136