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 实例......为什么?

4

3 回答 3

5

尝试在清单上的活动标签上添加此属性:

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

有价值singleTopsingleInstance

活动元素文档

于 2012-05-06T20:29:40.967 回答
2

我有一个音乐播放器,它具有初始启动器活动,然后是选择活动,然后是播放器。通知需要将用户返回给播放器。我使用了 Christophe 的想法,发现将

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

在 PLAYER ACTIVITY 的 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);
}

向克里斯托夫致敬。这是一个很难得到正确答案的问题。

于 2014-02-10T21:09:01.200 回答
-1

设置适当的启动模式,或添加所需的意图标志。

于 2012-05-06T20:31:32.420 回答