Android 在显式尝试的同时启动隐式意图并完成活动

Android 在显式尝试的同时启动隐式意图并完成活动,android,android-intent,Android,Android Intent,在我的应用程序中,经过身份验证的用户可用的选项之一是删除他们的帐户。当他们选择此选项时,我想做三件事: 发起访问网站的隐含意图,例如参加调查或其他活动 启动一个明确的意图,以转到应用程序的介绍/启动活动 完成当前活动 这是“删除帐户”按钮的单击处理程序: 实际发生的情况是,介绍/启动活动开始,当前活动结束,但浏览器没有启动。我不知道这些标志对于明确的意图是否真的是必要的 如果我颠倒单击处理程序中事件的顺序,它似乎可以在硬件电话上工作,但由于某些原因无法在模拟器中工作: val intent2 =

在我的应用程序中,经过身份验证的用户可用的选项之一是删除他们的帐户。当他们选择此选项时,我想做三件事:

  • 发起访问网站的隐含意图,例如参加调查或其他活动
  • 启动一个明确的意图,以转到应用程序的介绍/启动活动
  • 完成当前活动
  • 这是“删除帐户”按钮的单击处理程序:

    实际发生的情况是,介绍/启动活动开始,当前活动结束,但浏览器没有启动。我不知道这些标志对于明确的意图是否真的是必要的

    如果我颠倒单击处理程序中事件的顺序,它似乎可以在硬件电话上工作,但由于某些原因无法在模拟器中工作:

    val intent2 = Intent(this, IntroActivity::class.java)
    intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
    startActivity(intent2)
    finish()
    
    val intent1 = Intent(Intent.ACTION_VIEW, "http://...")
    startActivity(intent1)
    

    我的问题有两个:为什么它会这样做?正确的方法是什么?

    你不能同时启动两个意图。其中一个优先,另一个被删除(我不确定哪个被忽略的版本在不同版本之间是否一致,所以我不会在那里发表评论)。您需要启动查询/调查,然后启动下一个响应意图。或者用一些额外的命令启动主屏幕,告诉它然后启动浏览器(所以你注销,转到主页,然后浏览器启动)。您不能将其作为两个直接的startActivity调用来执行。

    使用包含一系列
    意图的方法和一个可选的附加包

    使用startActivity而不是startActivity:

    val intent1 = Intent(Intent.ACTION_VIEW, "http://...")
    val intent2 = Intent(this, IntroActivity::class.java)
    intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
    val intents = arrayOf<Intent>(intent2, intent1)
    startActivities(intents)
    finish()
    
    val intent1=Intent(Intent.ACTION\u视图,”http://...")
    val intent2=Intent(这是IntroActivity::class.java)
    intent2.addFlags(Intent.FLAG\u ACTIVITY\u CLEAR\u TASK或Intent.FLAG\u ACTIVITY\u NEW\u TASK或Intent.FLAG\u ACTIVITY\u CLEAR\u TOP)
    val intents=arrayOf(intent2,intent1)
    星触觉(意图)
    完成()
    
    将意图放在需要显示在顶部的数组中的最后一个。

    “它为什么会以这种方式运行”——清除任务会清除任务。
    ACTION\u视图
    活动将是您任务的一部分,因此您将清除它。“正确的方法是什么?”——不要将“调查或其他事情”委托给其他应用程序。在应用程序中处理它。
    val intent1 = Intent(Intent.ACTION_VIEW, "http://...")
    val intent2 = Intent(this, IntroActivity::class.java)
    intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
    val intents = arrayOf<Intent>(intent2, intent1)
    startActivities(intents)
    finish()