gpt4 book ai didi

android - 从通知 Intent 中删除数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:07:40 25 4
gpt4 key购买 nike

我的启动器 Activity Intent 有问题。场景是:1. 将 intents 表单通知服务发送到我的启动器 Activity

PendingIntent contentIntent = PendingIntent.getActivity(this, TripLoggerConstants.PENDING_TRIPS_NOTIFICATION_ID, new Intent(this, MainActivity.class).putExtra("is_log", true), Intent.FLAG_ACTIVITY_CLEAR_TOP);

2。在我的 MainActivity 中,我得到了这个 Intent 。代码是:

if(this.getIntent().getExtras()!=null){

boolean isLogNewTripScreen = (boolean)this.getIntent().getExtras().getBoolean("is_log");

}
}

3。这工作正常,但是当我来自通知服务时,但是当我从非通知服务启动时,intentis 中的数据仍然存在。我如何从 intent 中删除该数据。

最佳答案

编辑:我创建了一个示例应用程序来测试这个问题和可能的解决方案。以下是我的发现:

如果您从带有附加功能的通知启动您的应用程序,然后通过从最近任务列表中选择它返回到您的应用程序,Android 将再次启动该应用程序,其方式与从通知启动时相同(即:使用额外)。这是错误还是功能,具体取决于您询问的对象。

您需要添加额外的代码来处理这种情况。我可以提供 2 个建议:

<强>1。使用 FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

创建通知时,在 Intent 中设置标志 Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS。然后,当用户选择通知并从通知启动应用程序时,这将不会在最近任务列表中为此任务创建条目。此外,如果此应用程序的最近任务列表中有一个条目,该条目也将被删除。在这种情况下,用户将无法从最近的任务列表返回到该任务。这通过消除用户从最近任务列表中启动应用程序的可能性(但仅当应用程序已从通知启动时)来解决您的问题。

<强>2。检测 FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

当用户从最近任务列表中启动您的应用时,Android 会在传递给 onCreate() 的 Intent 中设置标志 Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY 您的启动 Activity 。您可以在 onCreate() 中检测到此标志的存在,然后您知道该应用程序已从最近的任务列表启动,而不是从通知启动。在这种情况下,您可以忽略 Intent 中的额外部分仍然包含数据这一事实。

为您的应用程序选择最适合工作流程的解决方案。感谢您提出这个问题,这是一个需要解决的有趣挑战 :-)


附加信息:

您正在错误地创建 PendingIntent。你在打电话

PendingIntent contentIntent = PendingIntent.getActivity(this,
TripLoggerConstants.PENDING_TRIPS_NOTIFICATION_ID,
new Intent(this, MainActivity.class).putExtra("is_log", true),
Intent.FLAG_ACTIVITY_CLEAR_TOP);

您将 Intent.FLAG_ACTIVITY_CLEAR_TOP 作为第四个参数传递给 getActivity()。但是,该参数应该是 PendingIntent 标志。如果你想在 Intent 上设置 FLAG_ACTIVITY_CLEAR_TOP,你需要这样做:

PendingIntent contentIntent = PendingIntent.getActivity(this,
TripLoggerConstants.PENDING_TRIPS_NOTIFICATION_ID,
new Intent(this, MainActivity.class).putExtra("is_log", true)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP), 0);

关于android - 从通知 Intent 中删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19813652/

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