Скриншот Android take (ROOT)

Я занимаюсь разработкой приложения для снятия скриншотов с рут-доступом. Я использую этот вызов, чтобы сделать снимок экрана:

"/system/bin/screencap -p " + getFilesDir() + "screen.png"

Однако он создает этот снимок экрана в корневом контексте, и я не могу получить к нему доступ с помощью своего приложения, даже если я использую chmod 777 и chown user_id:user_id. SELinux по-прежнему говорит, что в этом доступе отказано, потому что u:r:untrusted_app:s0 в то время как tcontext u:object_r:app_data_file:s0, Я пробовал звонить su с --context u:r:untrusted_app:s0 но это не помогло

Любая идея о том, как выполнить правильный вызов захвата экрана, который сохранит его во внутреннем хранилище приложения, а затем разрешить доступ для приложения?

1 ответ

Если у вас есть доступ к файлу из-за разрешений, вы можете удалить -p <filename> часть команды. В этом случае созданное изображение будет передано на стандартный вывод, который определенно доступен вашему приложению. Вам просто нужно подключиться к InputStream из Process выполнить команду su и сохранить данные в файл или использовать его в своем приложении.

Как читать Stdout, если показано здесь: Чтение выходных данных команды внутри процесса su Обратите внимание, что в этом примере запрашивающий запрос хочет прочитать текст, поэтому принятое решение считывает данные в буфер и преобразует String - конечно, вам не нужно преобразование, так как файл PNG не является строкой для печати...

Другие вопросы по тегам