Как получить результат активности в режиме Android PIP? - PullRequest
0 голосов
/ 04 февраля 2019

Я заметил, что когда активность находится в режиме «картинка в картинке» (PIP) в Android, она не получает результаты, запрошенные через startActivityForResult(...).Разве я что-то не так делаю?Я написал пример приложения «голые кости», который переходит в режим PIP, а затем запускает действие для результата, который вызывает setResult(...) и finish, поэтому я не думаю, что мог все испортить.

Я предполагаюэта ошибка, вероятно, является непреднамеренным побочным эффектом различий в жизненном цикле Activity для действий, выполняющихся в режиме PIP;кажется, что они находятся в «запущенном, но приостановленном» состоянии большую часть времени и не возобновляются.

Может быть, у кого-то есть обходной путь, чтобы получить результат другим способом?Хотя я думаю, что отражение сейчас невозможно, поскольку Android P ограничен не-SDK интерфейсами.Кажется, лучшее, что мы можем сделать, - это изобрести другой механизм для отправки результатов, который использует широковещательные рассылки, но который не будет работать с существующими встроенными действиями, такими как получение результатов из Intent.ACTION_GET_CONTENT.

1 Ответ

0 голосов
/ 11 июля 2019

После этого поста https://proandroiddev.com/task-management-for-picture-in-picture-mode-on-android-o-882103271cad мы переопределяем метод 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
            }
        }
    }

...