我有一项通过按下按钮启动服务的活动。在服务初始化期间,如果发生错误,则会通过通知显示此错误,如下所示:
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实例......为什么?
答案 0 :(得分:5)
尝试在清单上的活动代码中添加此属性:
android:launchMode=["multiple" | "singleTop" |
"singleTask" | "singleInstance"]
值singleTop
或singleInstance
答案 1 :(得分:2)
我有一个具有初始启动器活动的音乐播放器,然后是选择活动,然后是播放器。通知需要将用户返回给玩家。我使用了Christophe的想法并发现了
android:alwaysRetainTaskState="true"
android:launchMode="singleTop"
在玩家活动的manfest活动标签中给了我正确的行为。然后确保您的通知调用PLAYER ACTIVITY类。我起初并没有这样做。它调用了应用程序启动器类,虽然这对于较新的Androids来说没问题,但它给我留下了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);
}
对克里斯托夫的称赞。这是一个难以得到正确答案的问题。
答案 2 :(得分:-1)
设置正确的启动模式,或添加所需的意图标记。