Java getIntent.remove extra不工作

Java getIntent.remove extra不工作,java,android,android-intent,android-notifications,Java,Android,Android Intent,Android Notifications,在创建家庭活动时,我得到了额外的字符串 public void showNotification(Context context,String pnrNumber){ Intent intent=new Intent(context,HomeActivity.class); intent.putExtra("PNR", pnrNumber); //To Clear the Activity Stack intent.setFla

在创建家庭活动时,我得到了额外的字符串

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++;

    }
然后在onClick中(mPnrSearch)


我删除了额外的,然后我按下后退按钮销毁了应用程序,并通过长按手机上的home(主页)按钮重新打开了它,然后额外的仍然存在,再次调用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;
}

这可能是一个Android bug,也可能是一个特性,这取决于您是否希望它发生;-)这个案例没有明确的记录,但很明显,它的行为方式与您描述的一样


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

在我的示例中,我将值从通知传递到了onMessageReceived中的MainActivity。为什么,因为我想按通知计数打开的应用程序,请单击指定的通知id,该id是我出于分析原因通过exteras传递的值(通知打开应用程序mainactivity)。无论如何,为了确定主活动是否通过通知打开,我检查了exteras值和intent标志。我注意到,当通过通知单击打开任何应用程序时,意图标志为0,因此我将以下内容添加到我的mainactivity中

 protected void onNewIntent(Intent intent) {
        // TODO Auto-generated method stub
        super.onNewIntent(intent);
        setIntent(intent);
    }

谢谢,事实就是这样,我现在已经解决了这个问题。
 protected void onNewIntent(Intent intent) {
        // TODO Auto-generated method stub
        super.onNewIntent(intent);
        setIntent(intent);
    }
if(getIntent().getFlags() == 0 && getIntent().getExtras() != null){
            Log.i("opened by notification only",getIntent().getStringExtra("myID"));
            //rest of process...............
        }