호환 앱 스트리밍

Android 13에서는 앱 스트리밍 기능을 통해 휴대전화에서 연결된 기기로 앱을 스트리밍하고 이러한 기기가 앱과 상호작용할 수 있습니다. 새로운 COMPANION_DEVICE_APP_STREAMING 역할을 사용하면 앱이 연결된 원격 기기의 프록시를 만들고 관리하여 로컬 기기에서 원격 기기로 앱을 스트리밍할 수 있습니다. COMPANION_DEVICE_APP_STREAMING 역할을 보유한 앱은 가상 디스플레이를 만들고 디스플레이에 앱을 실행한 다음 실행된 앱의 동영상을 다른 기기로 스트리밍할 권한을 얻을 수 있습니다. 역할 보유자 앱은 마치 기기가 주변기기로 연결된 것처럼 원격 기기에서 수신한 입력 및 마이크 이벤트를 로컬 기기로 다시 삽입할 수도 있습니다.

아키텍처

Android 13부터 새로운 가상 기기 관리자호환 기기 관리도구(CDM)가 주요 구성요소를 만들어 앱 스트리밍을 지원하고 원격으로 연결된 기기와 상호작용합니다.

가상 기기 관리자

앱 스트리밍은 가상 디스플레이를 활용하여 작동합니다. 가상 기기 관리자는 표시되는 기본 디스플레이와 별도로 가상 디스플레이를 만듭니다. 사용자가 앱 스트리밍을 시작하는 데 동의하면 앱이 가상 디스플레이에서 실행되거나 가상 디스플레이로 전송됩니다. 가상 디스플레이의 콘텐츠는 동영상 스트림으로 전송되어 연결된 기기에 표시됩니다.

가상 기기 관리자에는 VirtualDevice 인스턴스를 생성, 등록, 관리할 수 있는 API가 포함되어 있습니다.

VirtualDevice 인스턴스는 연결된 기기 및 관련 기능의 프록시입니다. VirtualDevice 인스턴스를 사용하면 연결된 기기가 다음을 실행하여 기기로 들어오는 앱 스트림을 수신하고 표시하고 상호작용할 수 있습니다.

  • 연결된 기기의 디스플레이에 표시하는 데 사용할 VirtualDisplay 인스턴스 생성
  • 원격 오디오 스트림(예: 연결된 기기의 마이크)을 재생하도록 로컬 기기에 삽입
  • 원격 입력 이벤트(예: 연결된 기기의 키보드)를 재생하도록 로컬 기기에 삽입

호환 기기 관리도구

CDM은 연결 상태를 관리하고 앱 스트리밍을 사용하기 위해 충족해야 하는 역할 요구사항을 적용합니다.

다음 그림은 앱 스트리밍 중 로컬 기기와 원격 기기 간의 상호작용을 보여줍니다.

앱 스트리밍 상호작용

그림 1. 앱 스트리밍 중 로컬 기기와 원격 기기 간의 상호작용

호환 앱 스트리밍 역할 구현

OEM은 COMPANION_DEVICE_APP_STREAMING 역할을 가진 앱을 구현하여 기기에서 풍부하고 안전한 교차 기기 환경을 지원할 수 있습니다.

앱 스트리밍을 사용 설정할 수 있는 가상 기기를 만들려면 앱이 COMPANION_DEVICE_APP_STREAMING 역할의 보유자여야 합니다. 역할이 부여되면 앱은 앱이 가상 기기를 만들 수 있게 해주는 CREATE_VIRTUAL_DEVICE 권한을 수신합니다. 역할 보유자는 연결된 기기의 프록시 역할을 하는 VirtualDevice 인스턴스를 만들어 앱 스트리밍을 구현해야 합니다. VirtualDevice 클래스는 다른 기기로 스트리밍하는 데 적합한 가상 디스플레이의 합성된 표면을 추출할 수 있는 메서드를 제공합니다. VirtualDevice 클래스는 원격 기기에서 발생하는 입력 이벤트를 로컬 기기에 삽입하는 API도 제공합니다. 이를 통해 로컬 기기에서 실행 중인 앱이 마치 원격 기기에서 원래 실행되는 것처럼 표시됩니다.

호환 앱 스트리밍 역할을 구현하려면 다음 단계를 따르세요.

  1. 매니페스트에서 REQUEST_COMPANION_PROFILE_APP_STREAMING 권한을 요청하는 앱을 만듭니다.

  2. 앱 스트리밍을 실행하기 위해 권한을 부여하라는 메시지를 사용자에게 표시합니다.

  3. CDM AssociationRequest 인스턴스를 만들어 COMPANION_DEVICE_APP_STREAMING 역할을 요청합니다. 역할이 부여되면 앱이 CREATE_VIRTUAL_DEVICE 권한을 수신합니다.

  4. VirtualDeviceManager#create()를 호출하여 VirtualDevice 인스턴스를 만듭니다. VirtualDevice 인스턴스를 사용하면 앱이 가상 디스플레이와 가상 입력을 만들고 관리할 수 있습니다.

  5. 가상 디스플레이에서 대기 중인 알림 인텐트를 실행하고 이 디스플레이의 동영상 캡처를 만듭니다.

  6. 연결된 기기에 연결을 만들고 연결된 기기로 가상 디스플레이를 스트리밍합니다.

  7. VirtualDevice API를 통해 연결된 기기에서 로컬 기기로 입력 이벤트를 다시 삽입합니다.

  8. 사용자가 원격 기기에서 스트리밍 앱을 닫으면 스트림을 종료하고 VirtualDevice 인스턴스를 제거합니다. 이 시점에서 이전의 스트리밍 앱은 로컬 기기의 백그라운드에서 실행되며 연결이 종료됩니다.

  9. 필요한 경우 앱 스트리밍을 다시 시작하려면 연결된 기기에서 더 많은 신호를 기다립니다.

앱은 원격 기기 연결, CDM에 연결 상태 보고 및 CDD에 설명된 보안 요구사항 적용을 담당합니다.

COMPANION_DEVICE_APP_STREAMING 역할 보유자 요구사항

CDM은 사용자가 앱을 스트리밍하는 앱을 기기와 연결할 때 COMPANION_DEVICE_APP_STREAMING 역할을 부여합니다. 이 역할은 기기 프로필과 연결되므로 이 프로필과 일치하고 Play 스토어에 추가할 수 있는 앱을 일부 제어할 수 있습니다. COMPANION_DEVICE_APP_STREAMING 역할 요구사항 목록은 Android 역할을 참고하세요. 자세한 내용은 Google 담당자에게 문의해 주시기 바랍니다.

COMPANION_DEVICE_APP_STREAMING 역할 보유자 기능

앱 스트리밍을 실행하기 위해 COMPANION_DEVICE_APP_STREAMING 역할은 역할 보유자 앱에 다음과 같은 기능과 동작이 있다고 가정합니다.

  • 다른 기기에 관한 연결을 만들고 관리합니다.
  • 다음과 같은 방법으로, 잠금 해제된 디스플레이를 포함하여 신뢰할 수 있는 가상 디스플레이를 만들고 관리합니다.
    • 가상 디스플레이에서 활동을 시작합니다.
    • 연결된 기기의 스트리밍된 앱에서 발생한 이벤트를 다시 로컬 기기에 삽입합니다. 예를 들어, 태블릿의 특정 좌표에서 발생한 터치 이벤트를 휴대전화의 동일한 좌표에서 재생하는 것입니다.
    • 스트리밍된 앱에서 오디오 데이터를 캡처합니다.
    • 스트리밍된 앱에서 마이크를 사용하는 동안 로컬 기기의 마이크 스트림을 연결된 기기의 마이크 스트림으로 교체합니다.
    • 스트리밍된 앱이 카메라를 사용하는 동안 로컬 기기의 카메라 스트림을 연결된 기기의 카메라 스트림으로 교체합니다.
  • 로컬 기기에서 연결된 기기로 알림을 관리 및 스트리밍하고 알림에 맞는 조치를 취합니다.
  • 로컬 기기에서 사용할 수 있는 앱 목록과 같은 로컬 기기의 메타데이터를 연결된 기기로 스트리밍합니다.
  • 기기 인증을 요청합니다.