gpt4 book ai didi

android - TaskStackBuilder,多个不同的 PendingIntents,通知

转载 作者:行者123 更新时间:2023-11-29 00:05:07 24 4
gpt4 key购买 nike

我在将 TaskStackBuilder 和不同的 PendingIntents 组合用于通知时遇到问题。让我解释一下它是关于什么的。

我有一个 IntentService,它会在出现问题时创建通知。有时它会创建几个独立的通知。为什么我不像谷歌所说的那样合并通知?因为每个通知都应该打开相同的 Activity,但在传递的 Intent 中具有不同的附加功能。所以这里做什么:

创建带有额外内容的新 Intent:

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 中按下后退按钮或向上按钮时,我想回到父 Activity。所以这就是我所做的(根据 Google 文档:http://developer.android.com/training/notify-user/navigation.html):

在 AndroidManifest.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:

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

Finnaly - 通知:

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

在这种情况下,应用会创建具有适当返回堆栈的不同通知,但具有相同的 PendingIntent。

当我在获取 PendingIntent 时用例如 feed.get_id()(或每个 PendingIntent 的另一个不同数字,如 System.currentTimeMillis())替换 requestCode 时,然后点击通知会为 Activity 带来适当的 Intent(每个通知都有不同的 PendingIntent ), 但没有返回堆栈 - 返回和向上按钮关闭应用程序。

我试过从 list 中删除 android:launchMode="singleTask",在创建新 Intent 时不添加标志,阅读了一半的 Internet,数百篇 StackOverflow 帖子,什么也没有。

我还没有管理这两种情况的工作组合 - 即:使用适当的 Intent 和返回堆栈打开 Activity。

事先请不要写类似“只需覆盖 onBackPressed 并从那里开始 Activity ”之类的东西 - 我想知道我在这里做错了什么以及如何使用适当的工具实现这一目标。

最佳答案

经过 4 个小时的工作,我终于找到了解决方案。这非常简单,您只需要为待处理的 Intent 提供不同的请求代码即可。

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

getPendingIntent() 方法的文档 TaskStackBuilder.getPendingIntent(int, int)

关于android - TaskStackBuilder,多个不同的 PendingIntents,通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34432300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com