TV 컨트롤러 관리

TV 기기는 기본 리모컨이나 게임 컨트롤러 형태로 앱과 상호작용하는 보조 하드웨어 기기가 필요합니다. 즉, 앱이 D패드 입력을 지원해야 합니다. 또한, 앱이 컨트롤러의 오프라인 전환과 두 종류 이상의 컨트롤러를 통한 입력을 처리할 수 있어야 합니다.

이 과정에서는 TV 기기용 컨트롤러 처리 요구사항에 대해 설명합니다.

D패드 최소 컨트롤

TV 기기용 기본 컨트롤러는 D패드입니다. 일반적으로 앱은 위, 아래, 왼쪽, 오른쪽, 선택, 뒤로, 홈 버튼만 있는 리모컨으로 작동할 수 있어야 합니다. 앱이 추가 컨트롤이 포함된 게임 컨트롤러를 필요로 하는 경우가 많은 게임이면 이러한 D패드 컨트롤을 사용하는 게임플레이를 허용하도록 시도해야 합니다. 이 경우, 앱은 사용자에게 컨트롤러가 필요하다고 경고하고 D패드 컨트롤러를 사용하여 게임을 적절히 종료할 수 있도록 허용해야 합니다. TV 기기용 D패드 컨트롤러로 탐색을 처리하는 방법에 대한 자세한 내용은 TV 탐색 기능 만들기를 참조하세요.

컨트롤러 연결 해제 처리

TV용 컨트롤러는 블루투스 기기인 경우가 많습니다. 이러한 기기는 전력 절약을 위해 주기적으로 절전 모드로 전환되며 TV 기기와 연결을 해제합니다. 즉, 이러한 재연결 이벤트를 처리하도록 구성하지 않으면 앱이 중단되거나 다시 시작될 수 있습니다. 해당 이벤트가 발생할 수 있는 상황은 다음과 같습니다.

  • 몇 분짜리 동영상을 보는 동안 D패드 또는 게임 컨트롤러가 절전 모드로 전환되면 TV 기기와 연결을 해제했다가 나중에 다시 연결합니다.
  • 게임플레이 중에 새로운 플레이어가 현재는 연결되어 있지 않은 게임 컨트롤러로 게임에 참여합니다.
  • 게임플레이 중에 플레이어가 게임을 종료하고 게임 컨트롤러의 연결을 해제합니다.

연결 해제 및 재연결 이벤트가 적용되는 모든 TV 앱 활동은 앱 매니페스트에서 재연결 이벤트를 처리하도록 구성되어야 합니다. 다음 코드 샘플은 키보드 또는 탐색 기기 연결, 연결 해제, 재연결을 비롯한 구성 변경을 처리하는 활동을 사용하는 방법을 보여줍니다.

    <activity
      android:name="com.example.android.TvActivity"
      android:label="@string/app_name"
      android:configChanges="keyboard|keyboardHidden|navigation"
      android:theme="@style/Theme.Leanback">

      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
      </intent-filter>
      ...
    </activity>
    

이렇게 구성을 변경하면 Android 프레임워크를 통해 앱이 다시 시작되는 좋지 않은 사용자 환경을 제공하는 것이 아니라, 재연결 이벤트를 통해 앱이 계속 실행되도록 할 수 있습니다.

다양한 D패드 입력 처리

TV 기기 사용자는 TV와 함께 두 종류 이상의 컨트롤러를 사용할 수 있습니다. 예를 들어 사용자에게 기본 D패드 컨트롤러와 게임 컨트롤러가 둘 다 있을 수 있습니다. 게임 컨트롤러가 D패드 기능으로 사용될 때 제공하는 키 코드는 실제 D패드가 전송하는 키 코드와 다를 수 있습니다.

사용자가 물리적으로 컨트롤러를 전환하여 앱을 작동시킬 필요가 없도록 앱은 게임 컨트롤러의 다양한 D패드 입력을 처리해야 합니다. 이러한 다양한 입력에 대한 자세한 정보는 컨트롤러 작업 처리를 참조하세요.

버튼 이벤트 처리

사용자가 컨트롤러에서 버튼을 클릭하면 앱은 키 이벤트를 통해 이벤트를 수신합니다. 의도한 버튼 동작은 미디어 이벤트(예: 재생, 일시중지 또는 중지)일 수도 있고 TV 유형 이벤트(예: 선택 또는 탐색)일 수도 있습니다. 만족스러운 사용자 환경을 제공하려면 앱이 컨트롤러 버튼에 일관된 동작을 할당해야 합니다.

TV UI 이벤트

이러한 키 이벤트를 생성하는 버튼은 아래 표에 따라 앱에서 처리되어야 합니다.

키 이벤트동작
BUTTON_B, BACK뒤로
BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTER선택
DPAD_UP, DPAD_DOWN, DPAD_LEFT, DPAD_RIGHT탐색

미디어 이벤트

사용자가 미디어를 시청 중인 경우 이러한 키 이벤트를 생성하는 버튼은 아래 표에 따라 앱에서 처리되어야 합니다. 앱에서 MediaSession을 제어하고 있는 경우 MediaControllerAdapter를 사용하여 아래 표시된 것처럼 MediaControllerCompat.TransportControls 메서드 중 하나를 호출해야 합니다. 이 컨텍스트에서 선택 버튼은 재생/일시중지 버튼과 같은 역할을 합니다.

키 이벤트TransportControls 호출동작
BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTERpause()재생
BUTTON_START, BUTTON_SELECT, BUTTON_A, ENTER, DPAD_CENTER, KEYCODE_NUMPAD_ENTERpause()일시중지
BUTTON_R1skipToNext()다음으로 건너뛰기
BUTTON_L1skipToPrevious()이전으로 건너뛰기
DPAD_RIGHT, BUTTON_R2, AXIS_RTRIGGER, AXIS_THROTTLEfastForward()빨리 감기
DPAD_LEFT, BUTTON_L2, AXIS_LTRIGGER, AXIS_BRAKErewind()되감기
(중지 동작과 연결된 키 이벤트는 없음)stop()중지

게임 컨트롤러 처리

D패드 컨트롤 지원

이 컨트롤 세트는 Android TV 기기의 기본값이므로 방향 패드(D패드) 컨트롤을 중심으로 컨트롤 스키마를 계획합니다. 플레이어는 핵심 게임플레이 제어뿐만 아니라 메뉴 및 광고 탐색에 이르기까지 게임의 모든 측면에서 D패드를 사용할 수 있어야 합니다. 따라서 Android TV 게임이 특정 터치 인터페이스를 참조해서는 안 됩니다. 예를 들어 Android TV 게임에서 플레이어에게 '계속하려면 여기를 하세요'라는 메시지를 표시하면 안 됩니다.

플레이어와 컨트롤러의 상호작용을 어떻게 구성하는지가 뛰어난 사용자 환경을 실현하는 데 핵심이 될 수 있습니다.

  • 컨트롤러 요구사항을 미리 알립니다. Google Play 설명을 사용하여 컨트롤러에 어떤 기능이 있어야 하는지를 플레이어에게 알려주세요. D패드만 있는 게임패드가 아니라 조이스틱이 있는 게임패드에 더 적합한 게임인 경우 이와 같은 사실을 명확히 전달하세요. 게임에 적합하지 않은 컨트롤러를 사용하는 플레이어는 만족스럽지 못한 사용자 경험을 하고 게임에 낮은 평점을 줄 가능성이 높습니다.
  • 일관된 버튼 매핑을 사용합니다. 직관적이고 유연한 버튼 매핑은 만족스러운 사용자 환경을 실현하는 데 핵심적입니다. 예를 들어 Accept에 A 버튼을 사용하고 Cancel에 B 버튼을 사용하여 허용되는 관행을 준수해야 합니다. 재매핑 기능의 형태로 유연성을 제공할 수도 있습니다. 버튼 매핑에 대한 자세한 내용은 컨트롤러 작업 처리를 참조하세요.
  • 컨트롤러 기능을 감지하여 적절하게 조정합니다. 컨트롤러와 게임 사이의 일치성을 최적화하려면 컨트롤러에 해당 기능에 대해 쿼리하세요. 예를 들어 플레이어가 공중에서 컨트롤러를 흔들어 객체를 조종하도록 하려고 합니다. 하지만 플레이어 컨트롤러에 가속도계 및 자이로스코프 하드웨어가 없으면 흔들어도 소용이 없습니다. 따라서 게임은 컨트롤러에 쿼리하여 움직임 감지가 지원되지 않으면 사용 가능한 다른 컨트롤 스키마로 전환해야 합니다. 컨트롤러 기능 쿼리에 대한 자세한 내용은 다양한 버전의 Android에서 컨트롤러 지원을 참조하세요.

적절한 뒤로 버튼 동작 제공

뒤로 버튼을 전환을 위해 사용해서는 안 됩니다. 예를 들어 메뉴를 여닫는 데 사용하면 안 됩니다. 탐색경로에서 플레이어가 있었던 이전 화면을 뒤로만 탐색해야 합니다(예: 게임플레이 > 게임 일시중지 화면 > 게임 기본 화면 > Android 홈 화면).

뒤로 버튼은 선형(뒤로) 탐색만 수행해야 하므로 뒤로 버튼을 사용하여 게임 내 메뉴(다른 버튼으로 열림)를 종료하고 게임플레이로 돌아갈 수 있습니다. 탐색 디자인에 대한 자세한 내용은 뒤로 및 위로 기능으로 탐색을 참조하세요. 구현에 대해 알아보려면 적절한 뒤로 탐색 제공을 참조하세요.

적절한 버튼 사용

일부 게임 컨트롤러는 시작, 검색 또는 메뉴 버튼을 제공하지 않습니다. 사용자 UI에서는 이러한 버튼 사용에 의존하지 않도록 해야 합니다.

여러 컨트롤러 처리

여러 플레이어가 각자 자신의 컨트롤러를 사용하여 함께 게임을 하는 경우 각 플레이어 및 컨트롤러 쌍을 매핑하는 것이 중요합니다. 컨트롤러 번호 식별을 구현하는 방법에 대한 자세한 내용은 getControllerNumber()를 참조하세요.

컨트롤러 연결 해제 처리

게임플레이 도중에 컨트롤러가 연결 해제되면 게임이 일시중지되고 연결 해제된 플레이어에게 컨트롤러를 다시 연결하라는 메시지가 표시된 대화상자가 나타납니다.

대화상자는 문제해결 도움말(예: 플레이어에게 '블루투스 연결 확인'을 요청하는 팝업 대화상자)도 제공합니다. 입력 기기 지원 구현에 대한 자세한 내용은 컨트롤러 작업 처리를 참조하세요. 블루투스 연결에 대한 자세한 내용은 블루투스를 참조하세요.

컨트롤러 안내 표시

게임에서 시각적 게임 컨트롤 안내를 제공하는 경우 컨트롤러 이미지에 브랜딩이 없어야 하며 Android와 호환되는 버튼만 포함해야 합니다.

Android 호환 컨트롤러에 대한 샘플 이미지를 보려면 Android TV 게임패드 템플릿(ZIP)을 다운로드하세요. 검은색 배경의 흰색 컨트롤러와 흰색 배경의 검은색 컨트롤러(그림 1 참조)가 PNG 파일 및 Adobe® Illustrator® 파일로 포함되어 있습니다.

그림 1. Android TV 게임패드 템플릿(ZIP)을 사용한 컨트롤러 안내 예입니다.