Android 14: разрешение на захват экрана среды, запрашиваемое неоднократно, несмотря на предыдущий грантAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Android 14: разрешение на захват экрана среды, запрашиваемое неоднократно, несмотря на предыдущий грант

Сообщение Anonymous »

Я разрабатываю приложение для Android, которое использует MediaProction для захвата экрана. Мое приложение работает, как и ожидалось, на Android 11 , где разрешение на захват экрана запрашивается один раз, а затем сохраняется в нескольких захватах. Тем не менее, на Android 14 система побуждает пользователю разрешение на захват экрана каждый раз, когда я пытаюсь захватить экран. Я не могу определить, почему он продолжает запрашивать разрешение, несмотря на то, что оно было ранее предоставлено. После предоставления приложение запускает услугу переднего плана (

Код: Выделить всё

MediaProjectionService
) для управления процессом захвата экрана. На устройствах Android 11 эта настройка работает безупречно: разрешение запрашивается один раз, а затем приложение может занимать несколько снимков экрана, не переиздавая пользователя. Однако при запуске одного и того же кода на Android 14 система отображает диалоговое окно разрешения на захват экрана каждый раз, когда я запускаю захват экрана. Это создает плохой пользовательский опыт, поскольку пользователям неоднократно предлагается разрешение, которое они уже предоставлены. Однако, когда я пытаюсь запечатлеть экран, используя сохраненный ResultData , я сталкиваюсь с следующей ошибкой:

Код: Выделить всё

java.lang.SecurityException: Don't re-use the resultData to retrieve the same projection instance, and don't use a token that has timed out. Don't take multiple captures by invoking MediaProjection#createVirtualDisplay multiple times on the same instance.
Эта ошибка предполагает, что непосредственно повторное использование ResultData не является правильным подходом к Android 14 . Как я могу правильно сохранить разрешение на захват экрана и избежать этой ошибки? /> [*] Я попытался сохранить код результата и data to sharedpreferences , чтобы сохранить разрешение. Переменная не является null .
[*] Я использую службу переднего плана.

Я также добавил все необходимые разрешения в Androidmanifest :







Вот ключевая часть внутри моего mainactivity.kt , эта функция называется каждый раз, когда нажата кнопка Capture :

Код: Выделить всё

    public fun requestScreenCapturePermission() {
// First check if we already have valid MediaProjection
if (mediaProjection != null) {
Log.d(TAG, "Using existing MediaProjection")
captureScreen()
return
}

// If not, request new permission
Log.d(TAG, "Requesting new screen capture permission")
val intent = mediaProjectionManager?.createScreenCaptureIntent()
if (intent != null) {
startActivityForResult(intent, SCREEN_CAPTURE_REQUEST_CODE)
} else {
Log.e(TAG, "Failed to create screen capture intent")
showError("Failed to create screen capture intent")
}
}
< /code>
И вот как это называется: < /p>
        buttonView?.findViewById(R.id.captureButton)?.apply {
setOnClickListener {
CoroutineScope(Dispatchers.Main).launch {
(context as? MainActivity)?.requestScreenCapturePermission()
}
}
}
Так что каждый раз я нажимаю кнопку capture , я получаю эти сообщения в своем logcat. Как видите, он всегда просит разрешение на захват экрана: < /p>
2025-04-11 17:15:26.159 17698-17698 MainActivity com.my.domain.appname D Requesting new screen capture permission
2025-04-11 17:15:30.847 17698-17698 MainActivity com.my.domain.appname D Screen capture permission granted, resultCode: -1
2025-04-11 17:15:30.852 17698-17698 MainActivity com.my.domain.appname D Starting capture service with resultCode: -1
2025-04-11 17:15:30.876 17698-17698 MediaProjectionService com.my.domain.appname D MediaProjection initialized: true
2025-04-11 17:15:30.881 17698-17698 MediaProjectionService com.my.domain.appname D Successfully got MediaProjection
< /code>
Что я спрашиваю: < /h3>

Кто -нибудь еще столкнулся с этой проблемой на Android 14? /> Существует ли лучший способ управлять разрешением среды проекции, который будет надежно работать во всех версиях Android? Способ проверить, есть ли разрешение уже предоставлено, и не запрашивать его снова? /> Компилирование SDK: 35 < /code> < /li>
У меня есть услуга переднего плана. < /li>
Android 11 работает отлично. Я с радостью предоставлю дополнительный контекст или информацию, если это необходимо.


Подробнее здесь: https://stackoverflow.com/questions/795 ... edly-despi
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»