Запуск настроек режима «картинка в картинке» в Android

#android

#Android

Вопрос:

я корейский студент, поэтому прошу прощения за то, что плохо говорю по-английски..

есть ли какой-либо способ запустить «Настройки Android -> Приложения -> Специальный доступ -> PIP», используя intent??

Из-за этого я не мог сомкнуть глаз.

Ответ №1:

Обычно вы можете запускать настройки, которые хотите использовать, следующим образом (в Kotlin)

 startActivity(Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS))
  

К сожалению, константа для настройки «картинка в картинке» скрыта. Это означает, что нет никаких способов сделать это надежно. Я имею в виду, что нет надежного решения, которое работало бы на каждой версии API и на каждом устройстве. Однако следующий фрагмент кода будет работать на некоторых устройствах, таких как эмулятор Android.

 startActivity(Intent("android.settings.PICTURE_IN_PICTURE_SETTINGS"))
  

Ответ №2:

Я опаздываю с этим ответом и хочу добавить на экран настройки параметров для конкретного приложения. Вам нужно передать идентификатор пакета приложения во втором параметре.

 startActivity(Intent("android.settings.PICTURE_IN_PICTURE_SETTINGS", Uri.parse("package:${packageName}")))
  

Кроме того, вы можете проверить, включен ли / отключен PIP в приложении, используя приведенный ниже метод.

  private fun hasPipPermission(): Boolean {
        val appOps = getSystemService(APP_OPS_SERVICE) as AppOpsManager?
        return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                appOps?.unsafeCheckOpNoThrow(AppOpsManager.OPSTR_PICTURE_IN_PICTURE, android.os.Process.myUid(), packageName) == AppOpsManager.MODE_ALLOWED
            } else {
                appOps?.checkOpNoThrow(AppOpsManager.OPSTR_PICTURE_IN_PICTURE, android.os.Process.myUid(), packageName) == AppOpsManager.MODE_ALLOWED
            }
        } else {
            false
        }
    }