我已经实现了DeeplinkActivity来捕获intent-filter数据方案并打开一个活动。我遇到的问题是应用程序已在后台打开,然后用户单击深层链接以打开主屏幕活动。如果用户按下退出应用程序,它将转到后台运行的内容。我希望它退出应用程序。
我试过这个。
Intent intent = new Intent(this, LaunchActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
但这不起作用。有什么建议吗?
答案 0 :(得分:2)
我刚刚解决了这个问题。
首先,您需要转到清单,并将launchMode设置为“ singleTask”,这将阻止您的应用完全打开新实例。
第二步,您需要进入接受该意图过滤器的Activity并覆盖此方法
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
}
现在通过使用此处的新意图,您将可以访问深层链接,并能够将其路由到应用内所需的位置。
答案 1 :(得分:-1)
发现这个差不多2年的问题,同时面临完全相同的问题......
可能为时已晚,但对于其他遇到同样问题的人:
我的解决方案是使用应用程序上下文代替当前(活动)上下文。所以第3行看起来像:
getApplicationContext().startActivity(intent);
答案 2 :(得分:-1)
实际上有两种方法可以解决您的问题:
在您的活动清单中设置android:launchMode="singleInstance"
(reference),这是从深层链接调用的。因此,活动始终是其任务的唯一成员。因此,活动不会重新使用已经运行的应用程序中的Backstack中的任何任务。小心使用singleInstance,如果您打开带有深层链接的singleInstance活动,然后从那里导航到另一个活动,然后按回来,您将进入当前活动的父活动,而不是您的singleInstance活动。因此,它以某种方式破坏标准的后导航,你必须处理所有这些特殊情况,这可能会非常烦人。
或者,对于API> = 16,您可以在活动的finishAffinity()
方法中使用:onBackPressed()
(reference),但在这里您必须以某种方式区分,如果应用程序是通过深层链接打开的,否则即使您只想导航回主菜单,它也会关闭您的应用程序。