【问题标题】:Reuse current app instance when clicking on Notification [duplicate]单击通知时重用当前应用程序实例[重复]
【发布时间】:2016-12-19 11:38:03
【问题描述】:

现在我正在使用PendingIntentNotification 启动我想要的Activity。但我想知道是否可以重用当前的应用程序实例。

例如:

  • 启动应用,Launcher Activity 被称为HomeActivity
  • 导航到SecondActivity
  • 按主页按钮
  • 点击应用通知并恢复SecondActivity

但如果用户没有导航到SecondActivity,我想在单击通知时打开HomeActivity。我很乐意为这个问题提供任何帮助:)

【问题讨论】:

  • 在pendingIntent中你会传递一个intent,所以在正常的intent中你应该设置一个像intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);这样的标志,所以如果应用程序在后台它只会把活动带到前面。

标签: android android-activity android-notifications android-pendingintent


【解决方案1】:

但我想知道是否可以重用当前的应用实例。

是的,如果应用程序在后台,您可以重复使用。在 PendingIntent 中你将传递一个 Intent,所以在那个 Intent 中你应该设置一个类似intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 的标志,所以如果应用程序在后台它只会将活动带到前面。

根据安卓文档:

FLAG_ACTIVITY_NEW_TASK

在 API 级别 1 中添加 int FLAG_ACTIVITY_NEW_TASK 如果设置,则此活动 将成为此历史堆栈上新任务的开始。一个任务 (从启动它的活动到下一个任务活动)定义 用户可以移动到的一组原子活动。任务可以 移到前台和后台;里面的所有活动 特定任务的顺序始终保持相同。请参阅任务和 返回堆栈以获取有关任务的更多信息。

此标志通常由想要呈现 “启动器”风格的行为:他们给用户一个单独的列表 可以做的事情,否则完全独立运行 启动它们的活动。

当使用这个标志时,如果一个任务已经在为这个活动运行 您现在正在开始,则不会开始新的活动; 相反,当前任务将简单地被带到前面 屏幕上的状态。请参阅 FLAG_ACTIVITY_MULTIPLE_TASK 用于禁用此行为的标志。

当调用者从 正在启动的活动。

查看文档here

但如果用户没有导航到 SecondActivity,我想打开 HomeActivity

如果您创建的通知意图类有 SecondActivity 作为启动器,为什么要启动 HomeActivity。它将创建一个新的 SecondActivity 并在它不在后台时启动它。

编辑:
如果您想从上次中断的地方重新启动应用程序,请尝试这样:

final Intent resumeIntent = new Intent(context, YourLauncher.class);
resumeIntent.setAction("android.intent.action.MAIN"); 
resumeIntent.addCategory("android.intent.category.LAUNCHER"‌​);
final PendingIntent resumePendingIntent = PendingIntent.getActivity(context, 0, resumeIntent, 0);

这里YourLauncher.class是启动器类名。

【讨论】:

  • 我想知道当我点击通知时是否有可能拥有与应用切换器中相同的功能,只需在我离开的地方重新进入应用即可。
  • 您可以使用intent.setAction("android.intent.action.MAIN");intent.addCategory("android.intent.category.LAUNCHER"); 来启动您离开的应用程序。
  • final Intent resumeIntent = new Intent("android.intent.action.MAIN"); resumeIntent.addCategory("android.intent.category.LAUNCHER"); final PendingIntent resumePendingIntent = PendingIntent.getActivity(context, 0, resumeIntent, 0); 这对我不起作用
  • @finki 检查我的编辑。
  • 是的,仍然没有恢复我离开的应用程序。但是谢谢你的努力:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多