Скриншот 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 не является строкой для печати...