TV 하드웨어 처리

TV 하드웨어는 다른 Android 기기와 상당히 다릅니다. TV에서는 다른 Android 기기에 있는 일부 하드웨어 기능(예: 터치스크린, 카메라 및 GPS 수신기가 있습니다. 또한 TV는 다음과 같이 보조 하드웨어 기기에 완전히 의존합니다. 사용자가 TV 앱과 상호작용하려면 리모컨이나 게임패드를 사용해야 합니다. ( 자세한 내용은 TV 컨트롤러 관리를 참고하세요.)

TV 앱을 빌드할 때 앱의 하드웨어 제한 및 요구사항을 신중하게 고려하고 TV 하드웨어에서 작동하는 것입니다. 앱이 TV에서 실행 중인지 확인하고 지원되지 않는 문제 처리 하드웨어 기능을 제공합니다

TV 기기 확인

TV 기기와 다른 기기 모두에서 작동하는 앱을 빌드하는 경우 앱이 실행되는 기기의 종류를 확인하고 앱 작업을 조정하세요. 대상 Intent를 통해 시작할 수 있는 앱이 있는 경우 기기 속성을 확인하여 TV 지향을 시작할지 여부를 결정 알 수 있습니다.

앱이 TV 기기에서 실행되는지 확인할 때 권장되는 방법은 PackageManager.hasSystemFeature() 메서드를 사용하여 기기가 텔레비전 모드로 실행 중인지 여부 다음 코드 예는 앱이 TV 기기에서 실행 중인 경우:

Kotlin

const val TAG = "DeviceTypeRuntimeCheck"

val isTelevision = packageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK)
if (isTelevision) {
    Log.d(TAG, "Running on a TV Device")
} else {
    Log.d(TAG, "Running on a non-TV Device")
}

자바

public static final String TAG = "DeviceTypeRuntimeCheck";

boolean isTelevision = getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK);
if (isTelevision) {
    Log.d(TAG, "Running on a TV Device");
} else {
    Log.d(TAG, "Running on a non-TV Device");
}

지원되지 않는 하드웨어 기능 처리

앱의 디자인과 기능에 따라 특정 문제 해결이 가능할 수도 있습니다. 사용할 수 없게 됩니다 이 섹션에서는 일반적으로 어떤 하드웨어 기능을 누락된 하드웨어 기능을 감지하는 방법, Android 기기에서 사용할 수 있는 살펴보겠습니다

지원되지 않는 TV 하드웨어 기능

TV는 다른 기기와 목적이 다르기 때문에 다른 Android 지원 기기에도 많이 있습니다. 따라서 Android 시스템에서는 TV 기기에서 다음 기능을 사용할 수 있습니다.

하드웨어 Android 기능 설명자
터치스크린 android.hardware.touchscreen
터치스크린 에뮬레이터 android.hardware.faketouch
텔레포니 android.hardware.telephony
카메라 android.hardware.camera
근거리 무선통신(NFC) android.hardware.nfc
GPS android.hardware.location.gps
마이크 android.hardware.microphone
센서 android.hardware.sensor
세로 방향 화면 android.hardware.screen.portrait

참고: 일부 TV 컨트롤러에는 마이크가 내장되어 있습니다. 여기에서 설명하는 마이크 하드웨어 기능과는 다릅니다. 컨트롤러 마이크가 완전히 작동함 지원됩니다.

기능 참조에서 기능, 하위 기능, 설명어의 전체 목록을 확인하세요.

TV 하드웨어 요구사항 선언

Android 앱은 앱 매니페스트에서 하드웨어 기능 요구사항을 선언하여 이러한 기능을 제공하지 않는 기기에 설치되지 않는다는 것을 의미합니다. 기존 앱의 매니페스트를 TV에서 사용할 수 있는지 면밀히 검토하세요. 선언으로 인해 TV 기기에 설치되지 않을 수도 있습니다.

앱에서 사용할 수 없는 터치스크린이나 카메라와 같은 하드웨어 기능을 사용하는 경우 하지만 이러한 기능을 사용하지 않고도 작동할 수 있는 경우, 앱의 매니페스트를 수정하여 이러한 기능이 필요하지 않음을 나타냅니다. 다음 매니페스트 코드 스니펫 앱에서 사용할 수 없는 하드웨어 기능이 필요하지 않다고 선언하는 방법을 보여줍니다. TV 기기에서는 이 기능을 사용하지만 TV가 아닌 기기에서는 해당 기능을 사용하는 경우:

<uses-feature android:name="android.hardware.touchscreen"
        android:required="false"/>
<uses-feature android:name="android.hardware.faketouch"
        android:required="false"/>
<uses-feature android:name="android.hardware.telephony"
        android:required="false"/>
<uses-feature android:name="android.hardware.camera"
        android:required="false"/>
<uses-feature android:name="android.hardware.nfc"
        android:required="false"/>
<uses-feature android:name="android.hardware.location.gps"
        android:required="false"/>
<uses-feature android:name="android.hardware.microphone"
        android:required="false"/>
<uses-feature android:name="android.hardware.sensor"
        android:required="false"/>
<!-- Some TV devices have an ethernet connection only -->
<uses-feature android:name="android.hardware.wifi"
        android:required="false"/>

참고: 일부 기능에는 android.hardware.camera.front와 같은 하위 기능이 있습니다. 아래 설명된 대로 특성 참조 앱에서 사용되는 하위 기능도 required="false"로 표시해야 합니다.

TV 기기에서 사용할 모든 앱은 터치스크린 기능이 필요하지 않음을 선언해야 합니다. TV 앱. 앱이 일반적으로 TV 기기에서 지원하지 않는 기능을 하나 이상 사용하는 경우 android:required 속성을 false로 설정해야 합니다.

주의: 값을 true로 설정하면 앱이 TV에 설치되지 않습니다. Android TV 홈 화면 런처에 표시되는 것과 관련되어 있습니다.

하드웨어 기능을 암시하는 권한 인식

일부 uses-permission 매니페스트 선언은 하드웨어 기능을 암시합니다. 이렇게 하면 앱 매니페스트의 권한으로 인해 앱이 TV에서 설치 및 사용되지 않을 수 있습니다. 기기에서 사용할 수 있습니다. 일반적으로 요청되는 다음 권한은 암시적 하드웨어 기능을 만듭니다. 요구사항:

권한 암시적 하드웨어 기능
RECORD_AUDIO android.hardware.microphone
CAMERA android.hardware.camera
android.hardware.camera.autofocus
ACCESS_COARSE_LOCATION

android.hardware.location

android.hardware.location.network (API 수준 20 이하 타겟팅) 만 해당)

ACCESS_FINE_LOCATION

android.hardware.location

android.hardware.location.gps (API 수준 20 이하 타겟팅) 만 해당)

ACCESS_WIFI_STATE
CHANGE_WIFI_STATE

android.hardware.wifi

일부 TV 기기는 이더넷으로만 연결되어 있습니다.

하드웨어 기능 요구사항을 암시하는 권한 요청의 전체 목록은 uses-feature 드림 참조하세요. 앱이 위에 나열된 기능 중 하나를 요청하는 경우 uses-feature 드림 선언을 선언할 수 있습니다. 필요합니다. android:required="false"

참고: 앱에서 Android 5.0 (API 수준 21) 이상을 타겟팅하는 경우 더 높고 ACCESS_COARSE_LOCATION 또는 ACCESS_FINE_LOCATION 권한이 없어도 사용자가 계속해서 앱을 사용할 수 있음(TV 기기에 네트워크 카드나 GPS가 없는 경우 포함) 있습니다.

앱에서 하드웨어 기능을 선택사항으로 설정한 후에는 앱의 동작을 조정할 수 있습니다. 다음 섹션에서는 하드웨어 기능을 확인하는 방법을 설명하고 하드웨어 기능을 변경하는 몇 가지 방법을 제안합니다. 앱 동작입니다.

매니페스트에서 기능을 필터링 및 선언하는 방법에 관한 자세한 내용은 다음을 참고하세요. uses-feature 드림 참조하세요.

하드웨어 기능 확인

Android 프레임워크는 하드웨어 기능을 사용할 수 없는 기기에서 확인할 수 있습니다 hasSystemFeature(String) 사용 메서드를 사용하여 런타임 시 특정 기능을 확인할 수 있습니다. 이 메서드는 확인할 지형지물을 지정합니다.

다음 코드 예는 하드웨어 기능의 사용 가능 여부를 감지하는 방법을 보여줍니다. 런타임 시:

Kotlin

// Check whether the telephony hardware feature is available.
if (packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
    Log.d("HardwareFeatureTest", "Device can make phone calls")
}

// Check whether android.hardware.touchscreen feature is available.
if (packageManager.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)) {
    Log.d("HardwareFeatureTest", "Device has a touchscreen.")
}

자바

// Check whether the telephony hardware feature is available.
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
    Log.d("HardwareFeatureTest", "Device can make phone calls");
}

// Check whether android.hardware.touchscreen feature is available.
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)) {
    Log.d("HardwareFeatureTest", "Device has a touchscreen.");
}

터치스크린

대부분의 TV에는 터치스크린이 없으므로 Android는 터치 스크린 상호작용을 지원하지 않습니다. TV 기기 또한 터치스크린을 사용하는 것은 다음과 같은 시청 환경과 일치하지 않습니다. 사용자는 디스플레이에서 3m 떨어진 곳에 앉습니다. UI 요소와 텍스트가 터치스크린 사용을 요구하거나 암시할 수 없습니다.

TV 기기의 경우 TV 리모컨의 방향 패드 (D패드)를 사용한 탐색 자세한 내용은 내비게이션을 제대로 지원하는 방법은 TV 탐색.

카메라

TV에는 일반적으로 카메라가 없지만 사진 관련 서비스를 제공할 수 있습니다. TV에서 앱을 실행합니다. 예를 들어 사진을 촬영하고, 보고, 수정하는 앱에서 다음과 같은 작업을 할 수 있습니다. TV의 사진 촬영 기능을 사용 중지하고 사용자가 동영상을 보고 편집까지 할 수 있습니다. 사진 장 TV에서 카메라 관련 앱이 작동하도록 하려면 앱 매니페스트에 다음 기능 선언을 추가합니다.

<uses-feature android:name="android.hardware.camera" android:required="false" />

앱이 카메라 없이 실행되도록 사용 설정하는 경우 앱에 코드 추가 카메라 기능의 사용 가능 여부를 감지하고 카메라 작동을 있습니다. 다음 코드 예에서는 카메라가 있는지 감지하는 방법을 보여줍니다.

Kotlin

// Check whether the camera hardware feature is available.
if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
    Log.d("Camera test", "Camera available!")
} else {
    Log.d("Camera test", "No camera available. View and edit features only.")
}

자바

// Check whether the camera hardware feature is available.
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
    Log.d("Camera test", "Camera available!");
} else {
    Log.d("Camera test", "No camera available. View and edit features only.");
}

GPS

TV가 정지해 있는 실내 기기이며 GPS (위성 위치 확인 시스템)가 내장되어 있지 않음 있습니다 앱에서 위치 정보를 사용하는 경우에도 사용자가 위치 또는 TV 기기 중에 구성된 우편번호와 같은 정적 위치 정보 제공자 사용 설정할 수 있습니다

Kotlin

// Request a static location from the location manager.
val locationManager = this.getSystemService(Context.LOCATION_SERVICE) as LocationManager
val location: Location = locationManager.getLastKnownLocation("static")

// Attempt to get postal code from the static location object.
val geocoder = Geocoder(this)
val address: Address? =
        try {
            geocoder.getFromLocation(location.latitude, location.longitude, 1)[0]
                    .apply {
                        Log.d(TAG, postalCode)
                    }
        } catch (e: IOException) {
            Log.e(TAG, "Geocoder error", e)
            null
        }

자바

// Request a static location from the location manager.
LocationManager locationManager = (LocationManager) this.getSystemService(
        Context.LOCATION_SERVICE);
Location location = locationManager.getLastKnownLocation("static");

// Attempt to get postal code from the static location object.
Geocoder geocoder = new Geocoder(this);
Address address = null;
try {
  address = geocoder.getFromLocation(location.getLatitude(),
          location.getLongitude(), 1).get(0);
  Log.d("Postal code", address.getPostalCode());

} catch (IOException e) {
  Log.e(TAG, "Geocoder error", e);
}

저전력 모드에서 재생 일시중지

일부 TV 기기는 사용자가 기기를 끌 때 저전력 모드를 지원합니다. 기기가 종료되는 대신 디스플레이를 사용 중지하고 Android를 유지합니다. 백그라운드에서 실행 중인 TV입니다. 이 모드에서도 오디오 출력이 계속 사용 설정되어 있으므로 기기가 저전력 모드일 때 현재 재생 중인 콘텐츠를 모두 중지합니다.

저전력 모드에서 재생되지 않도록 하려면 다음을 재정의합니다. onStop() 및 현재 재생 중인 콘텐츠를 모두 중지합니다.

Kotlin

override fun onStop() {
    // App-specific method to stop playback.
    stopPlayback()
    super.onStop()
}

자바

@Override
public void onStop() {
  // App-specific method to stop playback.
  stopPlayback();
  super.onStop();
}

사용자가 전원을 다시 켜면 onStart()가 호출됩니다. (앱이 활성 포그라운드 앱인 경우) 시작 및 중지에 대한 자세한 내용은 보려면 <ph type="x-smartling-placeholder"></ph> 활동 수명 주기