getIntent.remove 额外的不工作

getIntent.remove extra not working

public void showNotification(Context context,String pnrNumber){

        Intent intent=new Intent(context,HomeActivity.class);
        intent.putExtra("PNR", pnrNumber);

        //To Clear the Activity Stack
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);

        PendingIntent contentIntent = PendingIntent.getActivity(context, uniqueNumber,intent, Intent.FLAG_ACTIVITY_CLEAR_TASK);

        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context).setSmallIcon(R.drawable.ic_launcher)
                .setContentTitle("TravelKhana")
                .setContentText("Get food in train for the PNR:" +pnrNumber);
        mBuilder.setContentIntent(contentIntent);
        mBuilder.setDefaults(Notification.DEFAULT_SOUND);
        mBuilder.setAutoCancel(true);
        NotificationManager mNotificationManager =
            (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(uniqueNumber, mBuilder.build());
        uniqueNumber++;

    }

并且在 HomeActivity 的 oncreate 中我得到了这个额外的字符串

if(getIntent().hasExtra("PNR")){
                mPnrSearch.setTag(getIntent().getStringExtra("PNR"));
                onClick(mPnrSearch);
            }

然后在 onClick(mPnrSearch);

public void onClick(View v) {
        switch (v.getId()) {
        case R.id.pnrSearch:
            if(NetworkChecker.isConnected(getApplicationContext())) {
                easyTracker.send(MapBuilder.createEvent("Home Activity","click", "PNR", null).build());
            }
            Intent pnrIntent = new Intent(HomeActivity.this, PnrSearch.class);

            //If the user came from notification
            if(v.getTag() != null){
                pnrIntent.putExtra("PNR", v.getTag().toString());
                v.setTag(null);
                getIntent().removeExtra("PNR");
            }

            startActivity(pnrIntent);
            break;
}

我删除了额外内容,然后我按下后退按钮销毁了应用程序,并通过长按 phone 中的主页按钮重新打开它,然后在额外内容仍然存在并且 onClick(mPnrSearch) 是再次打电话,但我已经删除了多余的为什么会这样??我需要做什么来解决这个问题。

我认为删除后你应该更新新的意图,只需在你的activity

中实现这个功能
 protected void onNewIntent(Intent intent) {
        // TODO Auto-generated method stub
        super.onNewIntent(intent);
        setIntent(intent);
    }

这是一个 Android 错误或功能,具体取决于您是否希望它发生 ;-) 这种情况没有明确记录,但很明显它的行为方式与您相同描述。

我最近回答了一个类似的问题,并就如何处理这个问题提出了一些建议。有关详细信息,请参阅 my answer

在我的例子中,我将通知中的值从 onMessageReceived 传递到我的 MainActivity。为什么因为我想通过通知点击特定通知 ID 来计算打开的应用程序,这是我通过 exteras 传递的值(通知打开应用程序 mainactivity )出于分析原因。不管怎样,为了确定 main activity 是否被通知打开,我检查了 exteras 值和 intent 标志。我观察到,当通过通知打开应用程序时,单击意图标志为 0,因此我将以下内容添加到我的 mainactivity.

if(getIntent().getFlags() == 0 && getIntent().getExtras() != null){
            Log.i("opened by notification only",getIntent().getStringExtra("myID"));
            //rest of process...............
        }