意图恢复以前暂停的活动(从通知中调用)

时间:2011-03-09 15:20:13

标签: android android-activity notifications android-pendingintent

我正在开发一个向用户显示通知的应用。通知的目的是使用户在另一个活动中轻松返回活动。我在我的应用程序中使用此代码来创建和显示通知。

                    notification = new Notification(R.drawable.icon,
                            "Notify",
                            System.currentTimeMillis());
                    notification.setLatestEventInfo(this, "App name",
                            "App message",
                            PendingIntent.getActivity(
                                    this, 0,
                                    new Intent(this, Main.class),
                                    PendingIntent.FLAG_CANCEL_CURRENT));
                    notification.flags |= Notification.FLAG_ONGOING_EVENT;
                    nManager.notify(0, notification);

但是当用户点击通知时,会启动相同活动的新实例,而不是之前用户使用的实例。

我认为这与PendingIntent有关,但是我找不到如何让Intent恢复以前暂停的活动实例而不是创建新实例。

感谢。

5 个答案:

答案 0 :(得分:22)

我发现了怎么做。我添加了以下代码:

notifyIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

现在我的代码看起来像这样:

    notification = new Notification(R.drawable.icon,
            "Notify", System.currentTimeMillis());
    notification.setLatestEventInfo(this, "App name",
            "App message", PendingIntent.getActivity(this,
                    0, new Intent(this, Main.class)
                            .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                                    | Intent.FLAG_ACTIVITY_SINGLE_TOP),
                    PendingIntent.FLAG_CANCEL_CURRENT));
    notification.flags |= Notification.FLAG_ONGOING_EVENT;

答案 1 :(得分:9)

这对我有用android:launchMode="singleInstance"

<activity
        android:name="com.mosis.automatskidnevnik.MainActivity"
        android:launchMode="singleInstance"
        android:label="@string/app_name" >
        ...

答案 2 :(得分:1)

我通过设置

解决了同样的问题
android:launchMode="singleTask"

答案 3 :(得分:0)

创建PendingIntent时,使用:

  

Main.this.getBaseContext()

如果要返回相同的活动,则应使用默认的“活动”上下文。在这里阅读更多内容:

Android - what's the difference between the various methods to get a Context?

答案 4 :(得分:0)

除了@Jimix的正确答案之外,我会将PendingIntent requestCode从0更改为非零值,如另一个answer所述。另一方面,以前的Android版本有known bug,这让我花费了几个绝望的时间。在那里提出的解决方案对于我在发送通知之前取消PendingIntent工作正常:

if (Build.VERSION.SDK_INT == 19) {
   getNotificationPendingIntent().cancel();
}