Для справки, один из способов захвата экрана (а не только активности вашего приложения) - захват кадрового буфера (device / dev / graphics / fb0). Для этого у вас должны быть либо привилегии root, либо ваше приложение должно быть приложением с разрешениями для подписи («Разрешение, которое система предоставляет, только если запрашивающее приложение подписано тем же сертификатом, что и приложение, которое объявило разрешение ") - что очень маловероятно, если вы не скомпилировали свой собственный ROM.
Каждый захват кадров кадрового буфера с пары протестированных мной устройств содержал ровно один снимок экрана. Люди сообщают, что он содержит больше, я думаю, это зависит от размера кадра / дисплея.
Я пытался читать кадровый буфер непрерывно, но, похоже, он возвращает фиксированное количество прочитанных байтов. В моем случае это (3 410 432) байта, что достаточно для хранения кадра дисплея 854 * 480 RGBA (3 279 360 байтов). Да, кадр в двоичном формате, выводимый из fb0, в моем устройстве RGBA . Скорее всего, это будет зависеть от устройства к устройству. Это будет важно для вас, чтобы расшифровать его =)
В моем устройстве разрешения / dev / graphics / fb0 таковы, что только root и пользователи из групповой графики могут читать fb0.
graphics - группа с ограниченным доступом, поэтому вы, вероятно, получите доступ к fb0 только с рутированным телефоном с помощью команды su.
Приложения Android имеют идентификатор пользователя (uid) = приложение _ ## и идентификатор группы (guid) = приложение _ ## .
adb shell имеет uid = shell и guid = shell , который имеет гораздо больше разрешений, чем приложение. Вы можете проверить эти разрешения в /system/permissions/platform.xml
.
Это означает, что вы сможете читать fb0 в оболочке adb без root, но вы не будете читать его в приложении без root.
Кроме того, предоставление разрешений READ_FRAME_BUFFER и / или ACCESS_SURFACE_FLINGER для AndroidManifest.xml ничего не изменит для обычного приложения, поскольку они будут работать только для приложений signature .
Также проверьте это закрытая нить для более подробной информации.