getIntent.remove额外不工作

时间:2015-03-26 07:32:51

标签: 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.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;
}

我删除了额外的,然后我按下后退按钮销毁应用程序并通过长按手机中的主页按钮重新打开它,然后额外的仍然存在并再次调用onClick(mPnrSearch),但我有删除了额外的原因为什么呢?我需要做些什么才能解决这个问题。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

我认为删除后你应该更新新意图,只需在你的活动中实现这个功能

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

答案 2 :(得分:0)

在我的情况下,我将通知的值从onMessageReceived传递给了MainActivity。为什么,因为我想通过通知来计算打开的应用程序,请单击特定的通知ID,这是我出于分析原因而通过exteras(notification打开应用程序mainactivity)传递的值。无论如何,要找出主要活动是否通过通知打开,我同时检查了exteras值和intent标志。我观察到,通过通知打开应用程序时,其意图标志为0,因此我将以下内容添加到了mainactivity中。

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