В Android 13 функция потоковой передачи приложений позволяет телефонам транслировать свои приложения на подключенные устройства и позволяет этим устройствам взаимодействовать с приложениями. Новая роль COMPANION_DEVICE_APP_STREAMING
позволяет приложению создавать прокси-серверы для подключенных удаленных устройств и управлять ими для потоковой передачи приложений с локального устройства на удаленное устройство. Приложение, владеющее ролью COMPANION_DEVICE_APP_STREAMING
может получить разрешения на создание виртуального дисплея, запуск на нем приложения, а затем потоковую передачу видео запущенного приложения на другое устройство. Приложение-держатель роли также может вводить события ввода и микрофона, полученные от удаленного устройства, обратно в локальное устройство, как если бы это устройство было подключено как периферийное устройство.
Архитектура
Начиная с Android 13, новый диспетчер виртуальных устройств и диспетчер сопутствующих устройств (CDM) образуют ключевые строительные блоки для поддержки потоковой передачи приложений и взаимодействия с удаленными подключенными устройствами.
Диспетчер виртуальных устройств
Потоковая передача приложений работает за счет использования виртуальных дисплеев . Диспетчер виртуальных устройств создает виртуальный дисплей, отдельный от видимого основного дисплея. Когда пользователь соглашается начать потоковую передачу приложения, приложение запускается или переносится на виртуальный дисплей. Содержимое виртуального дисплея передается в виде видеопотока на подключенное устройство для отображения.
Диспетчер виртуальных устройств включает API, которые позволяют создавать, регистрировать экземпляры VirtualDevice
и управлять ими.
Экземпляр VirtualDevice
— это прокси-сервер для подключенного устройства и его возможностей. Экземпляр VirtualDevice
позволяет подключенному устройству получать, отображать и взаимодействовать с входящим потоком приложения, выполняя следующие действия:
- Создание экземпляра
VirtualDisplay
, предназначенного для отображения на дисплее подключенного устройства. - Вставка удаленного аудиопотока, например, с микрофона подключенного устройства, в локальное устройство для воспроизведения.
- Внедрение событий удаленного ввода, например, с клавиатуры подключенного устройства, в локальное устройство для воспроизведения.
Диспетчер сопутствующих устройств
CDM управляет состоянием подключения и обеспечивает соблюдение ролевых требований, которые должны быть выполнены для включения потоковой передачи приложений.
На следующем рисунке показано взаимодействие между локальным и удаленным устройством во время потоковой передачи приложения:
Рисунок 1. Взаимодействие между локальными и удаленными устройствами во время потоковой передачи приложений.
Реализация роли потоковой передачи сопутствующего приложения
OEM-производители могут реализовать приложение с ролью COMPANION_DEVICE_APP_STREAMING
, чтобы обеспечить на своих устройствах богатую и безопасную работу с несколькими устройствами.
Чтобы создать виртуальное устройство для включения потоковой передачи приложения, приложение должно быть владельцем роли COMPANION_DEVICE_APP_STREAMING
. Когда роль предоставлена, приложение получает разрешение CREATE_VIRTUAL_DEVICE
, которое позволяет приложению создавать виртуальное устройство. Ожидается, что обладатели ролей реализуют потоковую передачу приложений, создав экземпляр VirtualDevice
, который действует как прокси-сервер для подключенного устройства. Класс VirtualDevice
предоставляет методы, позволяющие извлекать составную поверхность виртуального дисплея, подходящую для потоковой передачи на другое устройство. Класс VirtualDevice
также предоставляет API для внедрения событий ввода, происходящих на удаленном устройстве, в локальное устройство, позволяя приложению, работающему на локальном устройстве, выглядеть так, как будто оно работает на удаленном устройстве.
Выполните следующие действия, чтобы реализовать роль потоковой передачи сопутствующего приложения:
Создайте приложение, которое запрашивает разрешение
REQUEST_COMPANION_PROFILE_APP_STREAMING
в манифесте.Предложите пользователю предоставить приложению разрешение на потоковую передачу приложения.
Создайте экземпляр CDM
AssociationRequest
, чтобы запросить рольCOMPANION_DEVICE_APP_STREAMING
. Приложение получает разрешениеCREATE_VIRTUAL_DEVICE
при предоставлении роли.Вызовите
VirtualDeviceManager#create()
чтобы создать экземплярVirtualDevice
. С помощью экземпляраVirtualDevice
приложение может создавать виртуальные дисплеи и виртуальные входы и управлять ими.Запустите ожидающее намерение уведомления на виртуальном дисплее и создайте видеозапись этого дисплея.
Создайте соединение с подключенным устройством и выполните потоковую передачу виртуального дисплея на подключенное устройство.
Обратно вводите события ввода с подключенного устройства на локальное устройство через API
VirtualDevice
.Когда пользователь закрывает приложение потоковой передачи на удаленном устройстве, завершите поток и удалите экземпляр
VirtualDevice
. На этом этапе предыдущее приложение потоковой передачи работает в фоновом режиме на локальном устройстве, и соединение закрывается.При необходимости дождитесь дополнительных сигналов от подключенного устройства, чтобы перезапустить потоковую передачу приложения.
Приложение отвечает за подключение к удаленному устройству, отправку отчета о состоянии подключения в CDM и соблюдение требований безопасности, как описано в CDD .
Требования к владельцу роли COMPANION_DEVICE_APP_STREAMING
CDM предоставляет роль COMPANION_DEVICE_APP_STREAMING
, когда пользователь связывает приложение потоковой передачи приложения с устройством. Эта роль связана с профилем устройства, поэтому существует некоторый контроль над тем, какие приложения можно добавлять в Play Store, соответствующие этому профилю. Список требований роли COMPANION_DEVICE_APP_STREAMING
см. в разделе Роли Android . Для получения дополнительной информации обратитесь к своему контактному лицу в Google.
Возможности владельца роли COMPANION_DEVICE_APP_STREAMING
Для выполнения потоковой передачи приложения роль COMPANION_DEVICE_APP_STREAMING
предполагает, что приложение-владелец роли имеет следующие возможности и поведение:
- Создавайте подключения к другим устройствам и управляйте ими.
- Создавайте доверенные виртуальные дисплеи, включая разблокированные дисплеи, и управляйте ими следующим образом:
- Начните действия на виртуальном дисплее.
- Вносите события, которые происходят в потоковом приложении на подключенном устройстве, обратно на локальное устройство, например воспроизведение события касания на планшете по тем же координатам на телефоне.
- Захват аудиоданных из потокового приложения.
- Замените поток микрофона локального устройства потоком микрофона подключенного устройства, пока потоковое приложение использует микрофон.
- Замените поток камеры локального устройства потоком камеры подключенного устройства, пока потоковое приложение использует камеру.
- Управляйте уведомлениями и передавайте их с локального устройства на подключенное устройство, а также выполняйте действия с уведомлениями.
- Передавайте метаданные с локального устройства, например список приложений, доступных на локальном устройстве, на подключенное устройство.
- Запросить проверку устройства.