В Android 9 и более ранних версиях разрешения на захват буфера экрана ( READ_FRAME_BUFFER
, CAPTURE_VIDEO_OUTPUT
и CAPTURE_SECURE_VIDEO_OUTPUT
) предоставлялись приложениям, имеющим либо подписи, либо привилегированные разрешения. Это позволило осуществлять беспрепятственный захват экранного буфера, например создание снимков экрана или запись содержимого экрана устройства.
Начиная с Android 10, чтобы предотвратить бесшумный доступ к содержимому экрана устройства, разрешения на захват видео не предоставляются привилегированным приложениям. Доступ без согласия пользователя ограничен и предоставляется только приложениям, имеющим разрешение на подпись. Это требование распространяется на производителей устройств, запускающих привилегированные приложения, использующие эту функцию бесшумного захвата.
Начиная с Android 10, если у вас нет перечисленных разрешений для подписи захвата экранного буфера, ваше приложение не сможет захватывать экранные буферы без согласия пользователя. Чтобы убедиться, что у вас есть необходимые разрешения, найдите в файле манифеста ранее перечисленные разрешения для подписи. Перенесите все затронутые привилегированные приложения (найденные в вашем поиске) в класс MediaProjectionManager , который позволяет любому стороннему приложению захватывать экранные буферы без разрешений, но с согласия пользователя. Этот поток отображает диалоговое окно, предлагающее пользователю разрешить захват экрана, когда приложение инициирует его. В Android 10 новые функции диалогового окна включают следующее:
- Обеспечивает более заметные ассоциации со значком трансляции .
- Предоставляет дополнительную информацию о конфиденциальности данных, к которым можно получить доступ.
- Не позволяет пользователям скрывать диалоговое окно при будущих запусках: диалоговое окно отображается каждый раз.