Android 从现有任务中的通知启动新活动
我的应用程序接收推送并根据推送类型打开不同的活动 我使用Android 从现有任务中的通知启动新活动,android,android-intent,android-notifications,android-pendingintent,taskstackbuilder,Android,Android Intent,Android Notifications,Android Pendingintent,Taskstackbuilder,我的应用程序接收推送并根据推送类型打开不同的活动 我使用TaskStackBuilder来实现一个未决的意图,即在我的清单中与android:parentActivityName一起创建一个合成backstack 到目前为止,很容易。当应用程序未启动时,所有功能均按预期工作但如果应用程序在后台(任务正在运行),则挂起的意图也会使用清单中定义的父级启动所需的活动,但会重置现有任务。问题是,同时由用户启动的其他活动也会被清除 因此,a希望实现的是: 如果应用程序未启动,请使用合成后退(MainAct
TaskStackBuilder
来实现一个未决的意图,即在我的清单中与android:parentActivityName
一起创建一个合成backstack
到目前为止,很容易。当应用程序未启动时,所有功能均按预期工作但如果应用程序在后台(任务正在运行),则挂起的意图也会使用清单中定义的父级启动所需的活动,但会重置现有任务。问题是,同时由用户启动的其他活动也会被清除
因此,a希望实现的是:
TaskStackBuilder
我很乐意得到一些见解 使用
TaskStackBuilder
无法真正做到这一点。它不是为此而设计的。它总是在开始时重置任务
我会这样做:
- 让通知启动
。不要使用活动
,也不要创建任何人工后堆栈。如果应用程序当前处于活动状态,则此TaskStackBuilder
将在应用程序的当前任务中运行,并将置于最近打开的活动
之上活动
- 在这个新的
活动的
中,使用onCreate()
检查这个isTaskRoot()
活动是否是任务的根。如果此
是任务的根,则表示在启动此活动
之前,应用程序未处于活动状态。在这种情况下,您可以使用活动
创建一个人工后堆栈,然后以您想要的方式再次启动该对象(这将重置任务)TaskStackBuilder
TaskStackBuilder
,而是使用普通的意图。这与预期的一样有效,但我认为您的解决方案更加优雅。我现在使用一个PushOpenActivity,它通过正常意图路由到真正的目标,或者构建活动堆栈。对于使用此解决方案的每个人,请记住在清单中为此活动设置android:noHistory=“true”
。