当前位置: 首页 > 知识库问答 >
问题:

Android:如何在启动一个新的Intent之前传播ActivityResult(例如打开浏览器或深度链接)?

奚无尘
2023-03-14

我的项目有两个活动。用以下代码启动第二个活动:

private val secondActivityLauncher = registerForActivityResult(SecondActivity.Contract()) {
        when (it) {
            is SecondActivity.SecondActivityOutput.Success -> {
                // TODO
            }
            // ...
        }
    }

如果满足了某个条件,第二活动将结果设置为代码:

setResult(Activity.RESULT_OK, Intent().putExtra("MY_DATA_EXTRA", "some data"))

如果不满足条件,SecondActivity返回Activity.RESULT\u cancelledcode。

这在所有情况下都可以正常工作,除了一种情况:当第二个活动必须启动一个新的意图(例如打开浏览器或深度链接),同时完成自己并传播活动。RESULT_OK结果为Main Active

我试过这个:

kotlin prettyprint-override">setResult(Activity.RESULT_OK, Intent().putExtra("MY_DATA_EXTRA", "some data"))
finish()
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://www.google.com")))

但不是这样的。当用户关闭web浏览器活动时,Activity.RESULT\u OK值仅传递给MainActivity

是否可以这样实现:SecondActivity首先将结果返回到MainActivity,然后才启动浏览器?

共有1个答案

颜森
2023-03-14

收到结果后,您可以在main活动中移动浏览器开口:

private val secondActivityLauncher = registerForActivityResult(SecondActivity.Contract()) {
    when (it) {
        is SecondActivity.SecondActivityOutput.Success -> {
            if (it.resultCode == Activity.RESULT_OK) {
                // Get the result data
                const data = it.data?.getStringExtra("MY_DATA_EXTRA")

                // Open the browser
                startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://www.google.com")))
            }
        }
        // ...
    }
}
 类似资料:
  • 我最近实现了shouldInterceptRequest方法来检测链接的时间“http://sitemercado.com.br/valida“点击在android浏览器中打开它,而不是在webview中内部打开,直到它工作为止。链接在浏览器中打开,但当我回来查看webview应用程序时,它也被加载了,我希望它只在浏览器中加载。 我的代码如下: 我哪里做错了?

  • 大家好,我有一个TestNG测试套件,它按顺序执行测试。但在它开始运行测试之前。它打开所需数量的浏览器,然后逐个运行测试。我想将此行为更改为打开一个浏览器,运行test/s并关闭浏览器。然后打开另一个浏览器,运行test/s并关闭,依此类推。这可能吗? 我在IntelliJ上使用TestNG,JAVA。示例测试套件: 所有的测试都继承了主类,它有@BeforeClass和@AfterClass方法

  • 深度链接在android中不起作用。我已经把清单代码贴在这里了。当我测试时,它会进入网站,而不会在我的应用程序中打开我的活动。谁能帮我修一下吗? 更新: adb shell am start-W-aandroid.intent.action.VIEW-d"http://www.clinicloud.com/xyz"com.clinicloud.app 使用adb进行测试会打开应用程序,但仅使用浏览

  • 我试图编写一个函数,它将接收一个“浏览器实例”(我指的是),并打开一个带有特定URL的新选项卡。 这是函数: 返回True(如果URL有效) 如果有人能告诉我我做错了什么,我将非常感激。如果您有其他方法来完成打开新选项卡的任务,这是可以的。顺便说一下,我曾尝试使用:,但没有成功(我没有得到新的选项卡,也没有异常)

  • 我想通过浏览器打开下载的html文件,将它们传递给意图并从我的活动中启动它们。 我知道关于这个问题有十几条线索(例如this)。 然而,这些方法似乎都不起作用。 到目前为止,我已经: 我尝试设置mimeypes,如text/html,添加/删除类别,甚至使用多重mimetype和额外的mimetype标志,但这些想法都不适合我。 当前将打开一个“默认”浏览器,该浏览器无法显示文件。我想在Chrom

  • 问题内容: 是否有任何(简单/内置方式)打开新浏览器(我的意思是默认的OS浏览器)窗口来查找Electron链接的方法,而不是访问您Electron应用程序中的链接? 问题答案: 您可以简单地使用: