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