自定义操作意图在与我单击的应用程序相同的上下文中打开我的应用程序

时间:2014-02-21 07:31:06

标签: android android-intent

我对此进行了大量搜索。

但是,我的代码正在使用自定义意图URL打开我的应用程序。此URL通常通过电子邮件发送。

当我点击链接时,它打开我的应用程序很好,一切似乎都在工作;但是,它会在电子邮件应用程序的上下文中打开。

例如,如果我点击Gmail上的链接,当我打开多任务处理时,我必须点击Gmail返回刚刚打开的应用。

我认为它应该打开我的应用程序,我可以在我的其他应用程序运行时继续使用Gmail。

对此有何想法?

3 个答案:

答案 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_TASKIntent.FLAG_ACTIVITY_CLEAR_TOP标记(intent.SetFlags()。您的活动将在新任务中打开,此活动将成为新堆栈的根目录。

答案 2 :(得分:0)

这是android的默认行为,但要覆盖它,你需要传递

<强> Intent.FLAG_ACTIVITY_NEW_TASK

<强> Intent.FLAG_ACTIVITY_CLEAR_TOP

有你的意图。