有没有办法在不启动Activity的情况下,将应用程序从后台恢复到前台?
我的应用程序中有20个活动。当我收到通知时,我无法知道现在顶部的是哪个活动。我能否以某种方式恢复整个应用程序到前台(而不是使用SingleTop、ReoderToTop标志调用某些活动等方法,只需将现有应用程序移动到前台)?
有没有办法在不启动Activity的情况下,将应用程序从后台恢复到前台?
我的应用程序中有20个活动。当我收到通知时,我无法知道现在顶部的是哪个活动。我能否以某种方式恢复整个应用程序到前台(而不是使用SingleTop、ReoderToTop标志调用某些活动等方法,只需将现有应用程序移动到前台)?
你的代码过于复杂。你不需要一个虚拟的Activity
。你应该像Android在从主屏幕启动应用程序时所做的那样。
在你的通知中使用“启动Intent”:
val intent = getPackageManager().
getLaunchIntentForPackage("my.package.name")
如果您的应用程序已经在运行,则此操作将使应用程序回到前台,而不会创建任何新组件。如果应用程序尚未运行,则通过启动根Activity来启动应用程序。
class DummyPendingIntentActivity:AppCompatActivity()
{
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
}
}
2) 在虚拟操作活动的onCreate
方法中编写此逻辑。在此方法中,您可以检查堆栈中是否有任何活动,并在需要时恢复它们,或者您可以重新启动应用程序并启动您的“启动器”活动。
//Here we check if there any activities in stack
override fun onCreate(savedInstanceState: Bundle?)
{
if(isTaskRoot)
{
//No previous activity running will restart app
val intent = Intent(this,YourFirstLauncherAcitivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
startActivity(intent)
}
else
{
//Has some previous activity so will finish to show it
finish()
}
}
3) 在任何待处理的意图中调用此虚拟起始点,您将恢复您的应用程序或在需要时重新启动它。
val intent = Intent(context,DummyPendingIntentActivity::class.java)
val pendingIntent = PendingIntent.getActivity(AppClass.getApp(), 777, intent, 0)
...
setContentIntent(pendingIntent)
最近我遇到了一个问题,当应用程序在后台运行时,我必须通过点击推送通知来恢复顶部活动。我发现这个案例与您非常接近)
我通过在BaseActivity
的onResume()
方法中保存顶部活动意图来解决这个问题,如下所示:
Intent currentActivityIntent = new Intent(this, getClass());
currentActivityIntent.addFlags(FLAG_ACTIVITY_NEW_TASK);
currentActivityIntent.addFlags(FLAG_ACTIVITY_SINGLE_TOP);
App.setCurrentActivityIntent(currentActivityIntent);
点击推送后,我会获取顶部活动意图。
你只需要使用flags获取最后一个顶部活动的意图:
FLAG_ACTIVITY_NEW_TASK
和FLAG_ACTIVITY_SINGLE_TOP
都需要。