0

我有一个从活动/片段 MainActivity 启动的服务。从服务的广播中填充一个列表。用户可以单击列表项并在详细信息活动/片段 DetailsActivity 中查看项目详细信息。当列表中的项目被添加时,该服务将生成一个或多个通知。

用户可以通过下拉通知并单击其中一个通知来直接转到详细信息活动/片段 DetailsActivity。

我已将清单设置为指示正确的父活动,并使用 stackBuilder 将pendingIntent 添加到后台堆栈(如此处所示)。

从通知启动 DetailsActivity 时,使用后退按钮销毁 Activity,我最终回到启动器,而不是我想要的 MainActivity。我哪里出错了?

这是安卓版本 4.03

以下是创建通知的服务中的代码:

Context ctx = getBaseContext();
Intent notificationIntent = new Intent(ctx, DetailsActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(ctx);
stackBuilder.addParentStack(MainActivity.class);
stackBuilder.addNextIntent(notificationIntent);
PendingIntent contentIntent = stackBuilder.getPendingIntent(uniquePendingIntentID, PendingIntent.FLAG_UPDATE_CURRENT);

mNotificationMgr = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);

NotificationCompat.Builder builder = new NotificationCompat.Builder(ctx);
builder.setContentIntent(contentIntent)
        .setSmallIcon(R.drawable.icon_small)
        .setWhen(System.currentTimeMillis())
        .setAutoCancel(true)
        .setContentTitle("New list item found")
        .setContentText("Found a new list item: " + itemName)
        .setPriority(Notification.FLAG_HIGH_PRIORITY);
mNotificationMgr.notify(Integer.parseInt(deviceId), builder.build());

感兴趣的清单项目是:

<activity
    android:name="com.something.MainActivity"
    android:icon="@drawable/icon_main"
    android:label="@string/main_title"
    android:launchMode="singleInstance">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity
    android:name="com.something.DetailsActivity">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.something.MainActivity" />
</activity>
4

2 回答 2

0

我在各种 Android 平台上都遇到过这个问题:4.1、4.2 甚至 4.4。奇怪的是,它似乎依赖于设备。例如,在装有 Android 4.4.2 的 Nexus 4 上,它不起作用,但在装有 Android 4.4 的 Galaxy S4 上,它起作用了!此外,在 Cyanogenmod Android 4.3.1 Galaxy S2 上,它可以工作。

于 2014-03-21T12:12:40.183 回答
0

实际上,当您调用 addParentStack(MainActivity.class) 时,您会将 MainActivity 的父级添加到堆栈中(因此没有任何内容,因为您的 MainActivity 没有父级)。

您正在寻找的 addNextIntentWithParentStack(yourIntent) 会将 yourIntent 的父堆栈添加到堆栈中,然后添加 yourItent。

于 2014-03-21T13:19:13.853 回答