Фон
Android получил новый API на Kitkat и Lollipop для захвата видео с экрана. Вы можете сделать это либо с помощью инструмента ADB, либо с помощью кода (начиная с Lollipop).
С тех пор как появился новый API, многие приложения использовали эту функцию, позволяющую записывать экран, и Microsoft даже создала собственное приложение-конкурент Google-Now-On-Tap.
Используя ADB, вы можете использовать:
adb shell screenrecord /sdcard/video.mp4
Вы даже можете сделать это из самой Android Studio.
Проблема
Я не могу найти учебник или объяснение того, как это сделать с помощью API, то есть в коде.
Что я нашел
Единственное место, которое я нашел, - это документация (здесь, в разделе "Снимок экрана и совместное использование"), где говорится:
Android 5.0 позволяет добавлять захват экрана и совместное использование экрана возможности вашего приложения с новыми API-интерфейсами android.media.projection. Эта функция полезна, например, если вы хотите включить совместное использование экрана в приложении для видеоконференций.
Новый метод
createVirtualDisplay()
позволяет вашему приложению захватывать содержимое основного экрана (дисплей по умолчанию) в поверхность объект, который ваше приложение может затем отправить по сети. Только API позволяет захватывать незащищенный контент экрана, а не системный звук. к начать захват экрана, ваше приложение должно сначала запросить пользователей разрешение путем запуска диалога захвата экрана с помощью намерения получено с помощью методаcreateScreenCaptureIntent()
.Пример использования новых API приведен в MediaProjectionDemo. класс в примере проекта.
Дело в том, что я не могу найти образец "MediaProjectionDemo". Вместо этого я нашел образец "Захват экрана", но я не понимаю, как он работает. Когда я его запускаю, я вижу только мигающий экран и не думаю, что он сохраняет видео в файл. Образец кажется очень глючным.
Вопросы
Как мне выполнить эти действия, используя новый API:
- начать запись, опционально включая звук (микрофон/динамик/оба).
- остановить запись
- сделать скриншот вместо видео.
Кроме того, как я могу настроить его (разрешение, запрашиваемые кадры в секунду, цвета, время...)?