25

私は問題を抱えて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);
4

3 に答える 3

69

おそらく2つの異なる問題がここにあります:

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

2)インテントにアクションを設定しないと、エクストラが伝播されないことを読んだので、おそらくintent.setAction( "com.blah.Action")を試してください。

于 2011-03-10T07:28:37.447 に答える
12

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

于 2011-07-06T05:07:07.353 に答える
2

これは、Activity::getIntent が特定のインテント フラグ/フィルターを指定してアクティビティの元のインテントを返すことが原因である可能性があります。

その場合は、Activity::onNewIntentを確認する必要があります。そのメソッドをオーバーライドすると、その関数に渡されるインテントは、適切なエクストラなどを備えた新しいインテントである必要があります。

クレジットは、私の問題を解決するのに役立ったこの SO の質問に当てはまります:検索可能なアクティビティの Intent.getAction() null はなぜですか?

于 2011-01-07T19:38:59.133 に答える