クリアリングの意図 質問する

クリアリングの意図 質問する

私の 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);
}

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

ベストアンサー1

アップデート:

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

@tato-rodrigo の回答によれば、状況によっては、既に処理されたインテントを検出するのに役立たないことを明確に指摘しておきます。

また、私が「明確」を引用符で囲んだのには理由があります。ない実際にこれを行うことでインテントをクリアすると、余分なものを削除することで、このインテントがアクティビティによってすでに認識されていることを示すフラグとして使用されるだけです。


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

上記の回答で正しい方向に進み、さらに簡単な解決策を見つけました。以下を使用します。

getIntent().removeExtra("key"); 

インテントを「クリア」するためのメソッド呼び出し。

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

おすすめ記事