TV ハードウェアに対応する

テレビのハードウェアは、他の Android デバイスとは大きく異なります。テレビは タッチスクリーンなど、他の Android デバイスに搭載されているハードウェア機能の一部が含まれています。 カメラ、GPS 受信機などですテレビは、セカンダリ ハードウェア デバイスに完全に依存しています。 テレビアプリを操作するには、リモコンまたはゲームパッドを使用する必要があります。( TV コントローラを管理するをご覧ください)。

TV 向けアプリを作成する際は、Android TV アプリのハードウェアの制限と要件を テレビ ハードウェアで動作します。アプリがテレビで実行されているかどうかを確認し、サポートされていない問題に対処する ハードウェア機能を提供します。

テレビデバイスをチェックする

テレビデバイスとその他のデバイスの両方で動作するアプリを作成する場合は、 アプリが実行されているデバイスの種類を確認したり、アプリの動作を調整したりできます。対象 たとえば、Intent から起動できるアプリがある場合は、 デバイスのプロパティを確認して、テレビ向け スマートフォンのアクティビティなどです。

アプリがテレビデバイスで実行されているかどうかを判断するには、PackageManager.hasSystemFeature() メソッドを使用して確認することをおすすめします。 デバイスがテレビモードで実行されているかどうか次のサンプルコードは、Google Cloud で アプリがテレビデバイスで動作している場合:

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")
}

Java

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 搭載デバイスにも使えますそのため、Android システムは テレビデバイスでは以下の機能を使用できます。

ハードウェア 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 のハードウェア要件を宣言する

Android アプリは、アプリ マニフェストでハードウェア機能の要件を宣言して、 そうした機能が備わっていないデバイスにはインストールされません。既存のファイアウォール ルールを アプリをテレビで使用する場合は、アプリのマニフェストにハードウェア要件がないかどうか入念に確認してください の宣言がテレビデバイスへのインストールを妨げる原因となっている可能性があります。

タッチスクリーンやカメラなど、Google Pixel で利用できないハードウェア機能をアプリで使用している場合 それらの機能を使用しなくても動作させることができます。その場合は、アプリのマニフェストを次のように変更してください。 その機能が必須でないことを示しています。次のマニフェスト コード スニペットは、 利用できないハードウェア機能をアプリが必要としていないことを宣言する方法を示します これらの機能はテレビ以外のデバイスでも使用する:

<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" としてマークしてください。

テレビデバイスで使用するすべてのアプリは、タッチスクリーン機能が不要であることを申告する必要があります。 詳しくは、Getting Started with TV アプリ。TV デバイスでサポートされていない機能をアプリで通常使用している場合は、 マニフェスト内のこれらの機能の android:required 属性設定を false に設定。

注意: ハードウェア機能を必須と宣言するには、 値を true に設定すると、アプリはテレビにインストールできなくなります 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

一部のテレビデバイスはイーサネット接続のみに対応しています。

ハードウェア機能の要件を暗黙的に示唆する権限リクエストの一覧については、 uses-feature ご覧くださいアプリが上記の機能のいずれかをリクエストしている場合は、 uses-feature 暗黙的なハードウェア機能のマニフェストに 必要ありません。android:required="false"

注: アプリが Android 5.0(API レベル 21)または 使用し、ACCESS_COARSE_LOCATION または ACCESS_FINE_LOCATION 権限があるので、ユーザーは TV デバイスにネットワーク カードや GPS がない場合でも、TV デバイスでアプリを実行する 受信します。

アプリのハードウェア機能をオプションにした後で、 カスタマイズして、アプリの動作を調整できます。次のセクションでは ハードウェア機能をチェックする方法と、 自動的に最適化されます。

マニフェストでの機能のフィルタリングと宣言について詳しくは、 uses-feature ご覧ください

ハードウェア機能を確認する

Android フレームワークは、ハードウェア機能が使用できないデバイスで 確認できます。hasSystemFeature(String) を使用する メソッドを使って実行時に特定の機能をチェックするこのメソッドは、1 つの文字列引数を取ります。 では、チェックする機能を指定します。

次のコードサンプルは、ハードウェア機能の可用性を検出する方法を示しています。 実行時:

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.")
}

Java

// 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.");
}

タッチスクリーン

ほとんどのテレビにはタッチスクリーンがないため、Android はタッチスクリーンの操作をサポートしていません。 テレビデバイス。さらに、タッチスクリーンの使用は、 ユーザーがディスプレイから 3 メートルの距離にいること。UI 要素とテキストが入力境界に タッチスクリーンの使用を要求または暗示するコンテンツ。

TV デバイス向けにサポートするようにアプリを設計する テレビのリモコンの十字キー(D-pad)を使用したナビゲーションこのモジュールの ナビゲーションを適切にサポートするには、以下をご覧ください。 テレビのナビゲーション

カメラ

テレビには通常カメラは付いていませんが、写真関連の アプリを開きます。たとえば、写真の撮影、表示、編集を行うアプリの場合、 テレビの撮影機能を無効にし、ユーザーに閲覧と編集を許可する できます。カメラ関連のアプリをテレビで動作できるようにするには、 次の機能宣言をアプリ マニフェストに追加します。

<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.")
}

Java

// 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

テレビは据え置き型の屋内デバイスであり、グローバル ポジショニング システム(GPS)を内蔵していない 受信します。アプリで位置情報を使用する場合でも、 テレビデバイスで設定した郵便番号などの静的位置情報プロバイダの使用 できます。

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
        }

Java

// 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);
}

省電力モード中に再生を一時停止する

一部のテレビデバイスは、ユーザーがデバイスをオフにしたときに省電力モードをサポートします。 デバイスはシャットダウンする代わりにディスプレイを無効にして、 バックグラウンドで動作しているテレビ。このモードでも音声出力は有効なので、 デバイスが省電力モードのときに再生中のコンテンツを停止する。

省電力モードのときに再生しないようにするには、 onStop() 現在再生中のコンテンツを停止します。

Kotlin

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

Java

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

ユーザーが電源を再び入れると、onStart() が呼び出されます。 アクティブなフォアグラウンド アプリの場合。リソースの起動と停止について詳しくは、 アクティビティについては、 <ph type="x-smartling-placeholder"></ph> アクティビティのライフサイクル