1. ホーム
  2. android

[解決済み] クリアリング・インテント

2022-07-26 07:51:47

質問

私のAndroidアプリは、情報を渡しているインテントから呼び出されています(ステータスバーのpendingintent)。

ホーム ボタンを押してアプリを再度開くと、再びインテントが呼び出され、同じエクストラがまだ残っています。

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
      super.onSaveInstanceState(savedInstanceState);
    }
    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
      super.onRestoreInstanceState(savedInstanceState);
    }

これは、想定したとおりに実行されないコードです。

    String imgUrl;
    Bundle extras = this.getIntent().getExtras();


    if(extras != null){
        imgUrl = extras.getString("imgUrl");
        if( !imgUrl.equals(textView01.getText().toString()) ){

            imageView.setImageDrawable( getImageFromUrl( imgUrl ) );
            layout1.setVisibility(0);
            textView01.setText(imgUrl);//textview to hold the url

        }

    }

そして私の意図

public void showNotification(String ticker, String title, String message, 
    String imgUrl){
    String ns = Context.NOTIFICATION_SERVICE;
    NotificationManager mNotificationManager = 
        (NotificationManager) getSystemService(ns);
    int icon = R.drawable.icon;        // icon from resources
    long when = System.currentTimeMillis();         // notification time
    CharSequence tickerText = ticker;              // ticker-text

    //make intent
    Intent notificationIntent = new Intent(this, activity.class);
    notificationIntent.putExtra("imgUrl", imgUrl);
    notificationIntent.setFlags(
        PendingIntent.FLAG_UPDATE_CURRENT | 
        PendingIntent.FLAG_ONE_SHOT);
    PendingIntent contentIntent = 
        PendingIntent.getActivity(this, 0, 
        notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT | 
        PendingIntent.FLAG_ONE_SHOT);

    //make notification
    Notification notification = new Notification(icon, tickerText, when);
    notification.setLatestEventInfo(this, title, message, contentIntent);
    //flags
    notification.flags = Notification.FLAG_SHOW_LIGHTS | 
        Notification.FLAG_ONGOING_EVENT | 
        Notification.FLAG_ONLY_ALERT_ONCE | 
        Notification.FLAG_AUTO_CANCEL;
    //sounds
    notification.defaults |= Notification.DEFAULT_SOUND;
    //notify
    mNotificationManager.notify(1, notification);
}

インテントをクリアしたり、以前に使用されたことがあるかどうかを確認する方法はありますか?

どのように解決するのですか?

アップデートを行う。

5年以上前に初めて書いたときは、この回答がこれほどまでに参照されるとは思いませんでした!

私は、@tato-rodrigo の回答のように、これはいくつかの状況で既に処理された意図を検出するのに役立たないことを指摘するために明らかにします。

また、私が "clear" を引用符で囲んだ理由を指摘すべきです - あなたは ではなく あなたは、この意図がすでに活動によって見られているというフラグとして、余分なものの削除を使用しているだけです。


私もまったく同じ問題を抱えていました。

上記の回答は私を正しい道に導いてくれ、さらに簡単な解決策を見つけました。

getIntent().removeExtra("key"); 

メソッド呼び出しでインテントをクリアします。

これは1年前に質問されたので、回答が少し遅くなりましたが、これが将来他の人の役に立つことを願っています。