2017-02-08 20 views
0

Я разрабатываю приложение для получения скриншотов с правами доступа root. Я использую этот вызов принять скриншот:Android сделать снимок экрана (ROOT)

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

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

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

ответ

0

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

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