Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android PIP模式下获得活动结果?_Android_Onactivityresult - Fatal编程技术网

如何在Android PIP模式下获得活动结果?

如何在Android PIP模式下获得活动结果?,android,onactivityresult,Android,Onactivityresult,我注意到,当一个活动在Android中处于画中画(PIP)模式时,它似乎没有收到通过startActivityForResult(…)请求的结果。除非我做错了什么?我编写了一个简单的示例应用程序,它进入PIP模式,然后启动一个result活动,调用setResult(…)和finish,所以我不认为我会把这搞砸 我假设这个bug可能是在PIP模式下运行的活动在活动生命周期中的差异造成的意外副作用;它们似乎大部分时间处于“已启动但已暂停”状态,而不是恢复 也许有人有办法以其他方式得到结果?虽然我猜

我注意到,当一个活动在Android中处于画中画(PIP)模式时,它似乎没有收到通过
startActivityForResult(…)
请求的结果。除非我做错了什么?我编写了一个简单的示例应用程序,它进入PIP模式,然后启动一个result活动,调用
setResult(…)
finish
,所以我不认为我会把这搞砸

我假设这个bug可能是在PIP模式下运行的活动在活动生命周期中的差异造成的意外副作用;它们似乎大部分时间处于“已启动但已暂停”状态,而不是恢复

也许有人有办法以其他方式得到结果?虽然我猜反射是不可能的,因为Android P限制了非SDK接口。似乎我们能做的最好的事情是发明另一种机制来发送结果,它使用广播,但这不适用于内置的现有活动,例如从
意图获取结果。操作获取内容

在这篇文章之后,我们覆盖了活动方法
finish()
要检查PIP模式何时启动,如果是,我们先导航到launcher活动,然后再调用super类方法,使活动结果逻辑工作

这是导航到启动器活动的代码

override fun finish() {
        if (pictureInPictureLaunched) navToLauncherTask()
        super.finish()
    }

fun navToLauncherTask() {
        val activityManager = baseContext.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
        // iterate app tasks available and navigate to launcher task (browse task)
        val appTasks = activityManager.appTasks
        for (task in appTasks) {
            val baseIntent = task.taskInfo.baseIntent
            val categories = baseIntent.categories
            if (categories != null && categories.contains(Intent.CATEGORY_LAUNCHER)) {
                task.moveToFront()
                return
            }
        }
    }

在这篇文章之后,我们重写Activity方法
finish()
,以检查何时启动了PIP模式,如果是,则在调用活动结果逻辑的超类方法之前导航到启动器活动

这是导航到启动器活动的代码

override fun finish() {
        if (pictureInPictureLaunched) navToLauncherTask()
        super.finish()
    }

fun navToLauncherTask() {
        val activityManager = baseContext.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
        // iterate app tasks available and navigate to launcher task (browse task)
        val appTasks = activityManager.appTasks
        for (task in appTasks) {
            val baseIntent = task.taskInfo.baseIntent
            val categories = baseIntent.categories
            if (categories != null && categories.contains(Intent.CATEGORY_LAUNCHER)) {
                task.moveToFront()
                return
            }
        }
    }

我猜这是因为当活动进入PIP模式时,它将被放入带有标志的新任务中。 根据官方文件,此标志不允许我们请求调用方活动的结果

当调用方请求正在启动的活动的结果时,不能使用此标志

为了解决这个问题,也许我们可以使用其他库,比如发送activity finish()事件和数据。

我想这是因为当activity进入PIP模式时,它将被放入带有标志的新任务中。 根据官方文件,此标志不允许我们请求调用方活动的结果

当调用方请求正在启动的活动的结果时,不能使用此标志


为了解决这个问题,也许我们可以使用其他库,比如发送activity finish()事件和数据。

你明白了吗?没有,但我想知道多简历是否适用于PIP,在这种情况下,问题可能会在较新的平台上消失,请看你明白了吗?没有,但我很好奇多重恢复是否适用于PIP,在这种情况下,问题可能会在较新的平台上消失,因为我实际上是指我的活动A在PIP模式下运行,我启动了另一个活动B以获得结果。当我开始活动B时,我没有使用NEW_任务标志。啊,很抱歉误解了你的问题,请忽略此答案。我的意思是我的活动A正在PIP模式下运行,我又开始了另一个活动B以获得结果。当我开始活动B时,我没有使用新的任务标志。啊,很抱歉误解了你的问题,请忽略此答案。