当前位置: 首页 > 知识库问答 >
问题:

TaskStackBuilder、多个不同的挂起内容、通知

斜昊空
2023-03-14

我对TaskStackBuilder和用于通知的不同挂起内容的组合有问题。让我解释一下是关于什么的。

我有一个IntentService,它会在出现问题时发出通知。有时它会创建几个独立的通知。为什么我不像谷歌说的那样合并通知?因为每个通知都应该打开相同的活动,但在传递的意图中有不同的额外内容。所以,下面是一个学生应该做的:

用额外的东西创造新的意图:

Intent notificationIntent = new Intent(this, ItemActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

notificationIntent.putExtra(ItemActivity.URL_KEY, feed.getUrl());
notificationIntent.putExtra(ItemActivity.FEED_ID, feed.get_id());
notificationIntent.putExtra(ItemActivity.TITLE, feed.getTitle());

现在是棘手的部分——我想用适当的后堆栈打开ItemActivity,这意味着当我在AppBar中按back按钮或Up时,我想回到父活动。以下是我的工作(根据谷歌文档:http://developer.android.com/training/notify-user/navigation.html):

在Androidanifest.xml我有:

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".ItemActivity"
        android:label="@string/item_activity"
        android:launchMode="singleTask"
        android:parentActivityName=".MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />
    </activity>

然后创建后堆栈:

TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(ItemActivity.class);
stackBuilder.addNextIntent(notificationIntent);

悬挂式帐篷:

PendingIntent notificationPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

芬兰-通知:

NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
        (...)
        .setContentIntent(notificationPendingIntent)
        (...)
mNotifyManager.notify(feed.get_id(), builder.build());

在这种情况下,应用程序使用正确的后栈创建不同的通知,但使用相同的PendingIntent。

当我在获取PendingEvent时替换requestCode时,例如feed。获取_id()(或每个类似PendingEvent的系统的另一个不同的数字。currentTimeMillis())然后点击通知会带来具有适当意图的活动(每个通知都有不同的PendingEvent),但没有后台堆栈-后退和向上按钮关闭应用程序。

我试过从清单中删除Android:launchMode=“singleTask”,在创建新意图时不添加标志,阅读了一半的互联网内容,数百篇StackOverflow帖子,什么都没有。

我还没有管理这两种场景的工作组合——也就是说:具有适当意图的开放活动和后栈。

提前请不要写“只需重写onBackPressed并从那里开始活动”之类的东西——我想知道我在这里做错了什么,以及如何使用适当的工具实现这一点。

共有1个答案

徐凌
2023-03-14

经过4个小时的工作,我终于找到了解决办法。这很简单,只需为未决意图提供不同的请求代码。

PendingIntent pendingIntent = stackBuilder.getPendingIntent((int) gcmMessage.getId() /*Unique request code for each PendingIntent*/, PendingIntent.FLAG_UPDATE_CURRENT);

GetPendingEvent()TaskStackBuilder方法的文档。GetPendingEvent(int,int)

 类似资料:
  • 在我的应用程序中,有两台laravel 5.2服务器正在运行,它们需要相互交互以使用guzzle获取资源。 在我的服务器1中,我使用League Transformer返回一些数据,但数据需要包含来自服务器2的资源。我使用转换函数中的guzzle获取数据: 当我请求将此资源发送到时,我得到以下响应: 我面临的问题是当我需要使用guzzle从服务器2访问MyModel(存储在服务器1中)时,因为我需

  • 这里也分享一下:https://github.com/tomakehurst/wiremock/issues/625 我正在编写一个集成测试,以验证与 REST API 交互的应用程序是否正确处理了不成功的请求。为此,我想模拟一个场景,其中 GET 请求对 HTTP 终结点发出两次。第一次,请求不成功,响应状态代码为500;第二次,请求成功,响应状态代码为 200。 请考虑以下示例: 有没有办法避

  • 问题内容: 我的Java应用程序需要具有比较文件系统中两个不同文件并确定它们的二进制内容是否相同的能力。 这是我当前的代码: 任何有关如何正确进行比较功能的提示或建议,将不胜感激。 问题答案: 最简单的方法是将内容读取为两个字符串,例如 ,然后对这些执行。您是否需要更复杂的差分功能?

  • 如何生成多个页面的pdf报告,每个页面上的内容相同。以下是单页报告的代码。多个页面应位于单个pdf文件中。

  • 我有两个模型,当我尝试添加新文件时,file\u id为null。我怎样才能解决这个问题? 客户: 文件: 存储库: 控制器: 我想添加带有Json内容的文件并使用customer_id作为外键。但是当我添加文件时,customer_id返回null。