Я хочу выполнить команду скриншота "adb shell /system/bin/screencap -p /sdcard/img.png"
в C. Я искал то же самое, и я получил решение для другой команды, и я изменил команду как
execl("/system/bin/screencap", "-p", "storage/sdcard0/screenShot.png", (char *)NULL);
но при запуске моего приложения и метода вызова вышеуказанной команды приложение получает сбой.
Как мне изменить команду "/system/bin/screencap -p /sdcard/img.png
" для запуска из кода C.
Обновление после ответа на вопрос
Приложение снова закрывается, и здесь находится журнал
06-21 11:52:01.488: I/WindowState(279): WIN DEATH: Window{40fed2c0 u0 com.mytest.ndktestapplication/com.mytest.ndktestapplication.MainActivity}
06-21 11:52:01.498: I/ActivityManager(279): Process com.mytest.ndktestapplication (pid 7745) has died.
06-21 11:52:01.498: W/ActivityManager(279): Force removing ActivityRecord{40ea9ab8 u0 com.mytest.ndktestapplication/.MainActivity}: app died, no saved state
Это ожидаемый результат семейных функций exec().
Что они делают, заменить текущую программу на указанную. Итак, до свидания.
Чтобы избежать этого, вам сначала нужно вызвать fork(), а затем вызвать exec() только в дочернем элементе, примерно так:
if (!fork()) {
// fork() returned zero, so we are in the child
execl...
}
Возможно, вам придется выполнить некоторую очистку перед вызовом функции exec.
Обратите внимание, что вы не сможете сделать снимок экрана из приложения на большинстве устройств, поскольку код приложения работает под идентификатором пользователя, которому не хватает разрешения на это. Но я, кажется, вспоминаю что существует узкий период, когда некоторые устройства отправляются без разрешения на эту функциональность, поэтому они могут работать на них.
Вызов
execl(path, arg0, arg1, ..., (char*) NULL);
Второй аргумент arg0
- это имя, которое было сказано в программе, для его вызова. Фактические аргументы, заданные программе, начинаются только с arg1
.
Итак, вы должны изменить свой код на
execl("/system/bin/screencap", "screencap", "-p", "<pic>", (char *)NULL);
system()
плз
system("/system/bin/screencap -p storage/sdcard0/jni_knox_test.png")
, но я не думаю, что это даст вам другие результаты.