我对此进行了大量搜索。
但是,我的代码正在使用自定义意图URL打开我的应用程序。此URL通常通过电子邮件发送。
当我点击链接时,它打开我的应用程序很好,一切似乎都在工作;但是,它会在电子邮件应用程序的上下文中打开。
例如,如果我点击Gmail上的链接,当我打开多任务处理时,我必须点击Gmail返回刚刚打开的应用。
我认为它应该打开我的应用程序,我可以在我的其他应用程序运行时继续使用Gmail。
对此有何想法?
答案 0 :(得分:4)
让您的网址如下所示:
intent:#Intent;launchFlags=0x10000000;component=com.mycompany.myapp/com.mycompany.myapp.MyActivity;end
此网址包含Intent.FLAG_ACTIVIY_NEW_TASK
的launchFlag,因此这将在单独的任务中启动您的应用程序(在电子邮件客户端或浏览器之外或其他任何位置)。
编辑:根据OP的评论添加其他详细信息
您说您使用的是这样的网址:http://com.my.app/5058749
在这种情况下,您必须使用Intent过滤器通过在清单中的某个<intent-filter>
上指定<activity>
来让Android打开您的应用。您可以采取以下措施来处理已启动的Activity的问题,该问题最终与启动它的Activity相同:
1)如果活动总是打算成为任务的根(开始,第一)活动,您可以在onCreate()
之后将以下代码放入<{strong> 1}}:
super.onCreate()
2)您可以通过添加
将此活动的启动模式设置为清单中的if (!isTaskRoot()) {
// Activity was launched into another task. Restart it in its own task
Intent intent = new Intent(this, this.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
return;
}
singleTask
到android:launchMode="singleTask"
定义。这将导致Activity在其自己的任务中启动,但此启动模式具有更微妙的其他后果,因此您需要小心使用它。一般来说,我不喜欢这样做,因为它往往会产生比它解决的问题更多的问题。
3)您可以通过检查用于在<activity>
启动它的Intent
来确定您的应用是否是从浏览器或电子邮件客户端启动的(意图将onCreate()
设置为通过浏览器或电子邮件客户端启动时的URL)。然后,您可以使用我在上面的选项1中提供的代码来决定是否要在自己的任务中重新启动它。
答案 1 :(得分:0)
向您的意图添加Intent.FLAG_ACTIVITY_NEW_TASK
和Intent.FLAG_ACTIVITY_CLEAR_TOP
标记(intent.SetFlags()
。您的活动将在新任务中打开,此活动将成为新堆栈的根目录。
答案 2 :(得分:0)
这是android的默认行为,但要覆盖它,你需要传递
<强> Intent.FLAG_ACTIVITY_NEW_TASK 强>
<强> Intent.FLAG_ACTIVITY_CLEAR_TOP 强>
有你的意图。