2012-05-06 49 views
0

我有一项活动,通过按钮按钮启动服务。在服务初始化,如果发生错误,被通知显示此错误,如下所示:为什么通知会打开另一个活动实例?

String tickerText = getString(R.string.init_error); 

Notification notification = new Notification(
     R.drawable.ic_stat_notify_msg, 
     tickerText, System.currentTimeMillis()); 

PendingIntent notificationIntent = PendingIntent.getActivity(
     this, 0, new Intent(this, MyServiceActivity.class), 0); 

notification.setLatestEventInfo(this, 
     getText(R.string.init_error_tts_title), 
     getText(R.string.init_error_tts_text), 
     notificationIntent); 

NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
nm.notify(R.string.init_error, notification); 

stopSelf(); 

当通知出现在状态栏上,我打开通知窗口。然后,当我点击通知时,会启动MyServiceActivity的新实例...为什么?

回答

5

尝试在你的活动代码,添加此属性的清单:

android:launchMode=["multiple" | "singleTop" | 
        "singleTask" | "singleInstance"] 

与价值singleTopsingleInstance

Activity Element Documentation

+0

'singleTop'是你想要的。 – techiServices

+0

是的,当然,这就是为什么我通过Doc完成我的答案链接 – ChristopheCVB

+0

太棒了!有用! – enzom83

-1

设置正确的发射模式,或添加所需的意图的标志。

2

我有一个音乐播放器,它有最初的启动器活动,然后是选择活动,然后是播放器。通知需要将用户返回给玩家。我用克里斯托夫的想法和发现,把

android:alwaysRetainTaskState="true" 
android:launchMode="singleTop" 

在玩家活动的manfest的活动标签给了我正确的行为。然后确保您的通知调用了PLAYER ACTIVITY类。起初我没有这样做。它调用了应用程序启动器类,虽然这对新的Android来说没问题,但它使我在Android 2.3.6中遇到了额外的活动问题。现在一切都很好。

如果我的活动修复程序不会为你工作,你必须暴力破解的方式,通过发现的选择在

http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

我要补充一点,我的球员是无状态的,只有四连接到服务的按钮。但是,如果你的活动需要它的状态设置在通知的意图来,你需要重写onNewIntent:

@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
} 

荣誉给克里斯托夫。这是一个很难得到正确答案的问题。