Захват экрана Android на рутированном устройстве

Снимок экрана на рутированном устройстве Я хочу сделать снимок экрана на андроид-устройстве с рутованным использованием APK. Я старался

process = Runtime.getRuntime().exec("/system/bin/screencap -p " + path + ”/file.png ”);

Эта команда работает нормально, но она слишком медленная. Затем я попытался использовать второй вариант

View content = findViewById(android.R.id.content).getRootView();
content.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(content.getDrawingCache());
OutputStream fout = null;
File imageFile = new File(_path,"ScreenImage.png");
try {
    fout = new FileOutputStream(imageFile);
    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout);
    fout.flush();
    fout.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

Но в этом я вижу свое приложение, а не текущий экран. Я должен делать снимки экрана и делать из них видео Я использую FB0 для создания видео, но проблема заключается в том, чтобы снимать экран со скоростью 8 кадров в секунду

Пожалуйста, предложите решение для ускорения этого процесса. разрешение не проблема, оно может быть низкого качества.

2 ответа

Так как ваше устройство рутировано, взгляните на метод скрытия скриншота api SurfaceControl. Не проверял, достаточно ли быстро.

public static Bitmap screenshot(int width, int height) {
    // TODO: should take the display as a parameter
    IBinder displayToken = SurfaceControl.getBuiltInDisplay(
            SurfaceControl.BUILT_IN_DISPLAY_ID_MAIN);
    return nativeScreenshot(displayToken, width, height, 0, 0, true);
}

Обычный шаг для создания скриншота - перехват комбинации клавиш скриншота в PhoneWindowManager, затем подключение к сервису скриншотов в systemui. Этот сервис вызовет метод SurfaceControl.screenshot, чтобы сделать скриншот.

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