android - 保留中のインテントに固有のエキストラを正しく渡すにはどうすればよいですか?




android-intent alarmmanager android-pendingintent extras (4)

私は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);

Answers

私は同様の問題に遭遇しました。 PendingAntivity.FLAG_ONE_SHOTを使用すると、PendingActivityが再利用されないという問題が解決される可能性があります。


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

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

2)私はあなたがあなたの意図にアクションを設定しないと、エクストラを伝播しないので、おそらくintent.setAction( "com.blah.Action")を試していると読んでいます。


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

そのような場合は、 Activity::onNewIntentを参照する必要があります。 そのメソッドをオーバーライドし、その関数に渡されるインテントは、適切な追加機能を持つ新しいインテントでなければなりません。

私の問題を解決するのに役立ったので、検索可能なアクティビティのIntent.getAction()はなぜnullですか?


// OnClick Listener

  @Override
      public void onClick(View v) {
        String webUrl = news.getNewsURL();
        if(webUrl!="")
        Utils.intentWebURL(mContext, webUrl);
      }

// Utilメソッド

public static void intentWebURL(Context context, String url) {
        if (!url.startsWith("http://") && !url.startsWith("https://")) {
            url = "http://" + url;
        }
        boolean flag = isURL(url);
        if (flag) {
            Intent browserIntent = new Intent(Intent.ACTION_VIEW,
                    Uri.parse(url));
            context.startActivity(browserIntent);
        }

    }






android android-intent alarmmanager android-pendingintent extras