23

私はalarmManagerに問題とそれに沿って行くだろうエキストラと保留中の意図を持っています。保留中のインテントに固有のエキストラを正しく渡すにはどうすればよいですか?

私は、複数のアラームを設定した場合、彼らはしかし、エキストラは同じまま、消灯します。

私はすでに、これらの質問に読みました:

と私が試してみました:

  • は、保留中の各意図と
  • にユニークなIDを割り当てます
  • 無駄に、

すべてをすべての保留中の意図のフラグを使用して。なぜそれがうまくいかないのかわかりません。ここで

は、コードスニペットです:

Intent intent = new Intent(con, 
        AppointmentNotificationReciever.class); 
      intent.putExtra("foo", bar.toString()); 


      int id = randomNum; 

      PendingIntent sender = PendingIntent.getBroadcast(con, id, 
        intent, PendingIntent.FLAG_UPDATE_CURRENT); 


      AlarmManager am = (AlarmManager) con.getSystemService(Context.ALARM_SERVICE); 
      am.set(AlarmManager.RTC_WAKEUP, scheduleExecution, sender); 

答えて

66

おそらく二つの異なる問題:

1)すでにPendingIntentを作成していて、それが既存のPendingIntentと「一致」している場合は、PendingIntent.FLAG_UPDATE_CURRENTフラグを指定する必要があります。 「一致」はIntent.filterEquals()が使用する基準に基づいているため、確実にそこにあるドキュメントを読んで、データ、アクション、タイプなどを理解してください。

2)あなたの意図にアクションを設定しないと、エクストラを伝播しないので、おそらくintent.setAction( "com.blah.Action")を試してみてください。

+0

PendingIntent.FLAG_UPDATE_CURRENTを設定しようとしましたが、インテントが呼び出されたときに "java.lang.IllegalArgumentException:ここでFLAG_RECEIVER_BOOT_UPGRADEを使用できません"というエラーが表示されます。このBOOT私はFLAG_UPDATE_CURRENTを追加しました。前に同様の問題がありましたか? (私はHuawei Ideos、2.2にあります) –

+3

アクションを設定すると、実際に私の問題を解決しました、ありがとう! – shawkinaw

+0

setactionは私にとってはいい..同じ問題 – catalin87

2

これは、活動に起因することができ:: getIntentは、特定の目的のフラグ/フィルタ与えられた活動の本来の意図を返します。

それはあなたのためのケースである場合は、Activity::onNewIntentを見てする必要があります。そのメソッドをオーバーライドし、その関数に渡された意図は、適​​切なエキストラを持つ新しい意図であるべき、など

クレジットは私の問題を解決するために私を助け、このSOの質問に行く:ここWhy is my searchable activity's Intent.getAction() null?

11

私は同様の問題に遭遇しました。それはPendingActivityが再利用されないことを意味しますので、PendingIntent.FLAG_ONE_SHOTを使用することで、問題を解決することがあります。

関連する問題