我在A activity中写了个service,在service中生成了一个notification,点击这个通知后跳转到A activity中,一开始时,不是跳转到A activity中,而是直接生成了个A activity,这样就有两个了。后来给 A activity加了android:launchMode="singleTask" ,然后 PendingIntent 时加了intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 这样的话 点击通知是转到A activity中了。但是我在intent 中是加了参数的,在A activity中拿不到参数,这么办呢?99我吧。service.java中代码大致上是这样NotificationManager nmanarer = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new Notification(R.drawable.icon, tickertext, System.currentTimeMillis());PendingIntent pt = null;
Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);notificationid = 1001;
intent.setClass(this, MainTabActivity.class);
intent.putExtra("notificationid", notificationid);
pt = PendingIntent.getActivity(this, num, intent, PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(this, title, content, pt);
nmanarer.notify(notificationid, notification);
Activity中的代码 protected void onResume() {
super.onResume();
Log.i(TAG,"maintabactivity onResume");
Intent intent = getIntent();
if(intent != null){
CURMODE = intent.getIntExtra("curmode", CURMODE_HOMELIST);
MSGMODE = intent.getIntExtra("msgmode", MessageGroupActivity.MODE_MYPOST);
notificationId = intent.getIntExtra("notificationId", 0);
Log.i(TAG,"----notificationId="+notificationId + " CURMODE="+CURMODE);
}else{
Log.i(TAG, "the intent is null");
}
if(notificationId != 0){
NotificationManager nmanarer = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Log.i(TAG,"notificationId---"+notificationId);
nmanarer.cancel(notificationId);
}
}

解决方案 »

  1.   

    你插入的键名intent.putExtra("notificationid", notificationid);
    和你获取的键名是不同的notificationId = intent.getIntExtra("notificationId", 0);
    id是小写的,改过来应该就没问题了
      

  2.   

    我也遇到这个修改launchMode的属性以后,PendingIntent 传不了参数的问题,期待高人解决。
      

  3.   

    解决了!!!launchMode为singleTask的时候,通过intent启到一个activity,如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用onNewIntent方法,如下所示:protected void onNewIntent(Intent intent) {
     super.onNewIntent(intent);
     setIntent(intent);
      //在这里取数据
     Intent intent = getIntent();}
      

  4.   

    需要在A中重写这个方法
    @Override
    protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent); }