Как получить результат Runtime.getRuntime(). Exec напрямую

Я работаю над корневым устройством Android. Я пытаюсь захватить экран и сохранить результат в Bitmap для последующего использования.

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath();
path += "/img.png";

Process sh = Runtime.getRuntime().exec("su", null,null);
OutputStream  os = sh.getOutputStream();
os.write(("/system/bin/screencap -p " + path).getBytes("ASCII"));
os.flush();
os.close();
sh.waitFor();

final Bitmap x = BitmapFactory.decodeFile(path);

Что я здесь делаю, это именовать путь для нового изображения и захватывать экран с помощью команды /system/bin/screencap -p FILEPATH. Затем я прочитал изображение, которое я записал в этом файле, и использую его в растровом изображении.

Моя проблема с моим текущим кодом заключается в том, что он медленный (не подходит для приложения реального времени). Сейчас я пытаюсь сделать это быстрее. Вместо того, чтобы сохранять захваченное изображение в файл и затем снова читать его из программы, я хочу прочитать его непосредственно из результата Runtime.getRuntime().exec(...)

В описании команды screencap я обнаружил, что могу использовать ее без указания имени выходного файла, и в этом если результаты будут напечатаны на стандартный вывод.

Я попробовал несколько кодов, чтобы прочитать массив байтов результата, чтобы использовать его непосредственно в моем коде

final Bitmap x = BitmapFactory.decodeByteArray(resultArrayByte, 0, resultArrayByte.length);

но ни один из кодов не работал со мной.

Как я могу использовать потоки ввода/вывода sh, чтобы получить массив байтов результата напрямую, не сохраняя вывод в файл, а затем загружая его снова?

Ответ 1

Посмотрите здесь, в этой ссылке вы можете найти библиотеку под названием ASL

много вопросов в этом посте, я запутался:)

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