Fire TVデバイスを識別する


Fire TVデバイスを識別する

ほとんどのAmazon Fire TV対応アプリ開発者は、Google PlayとAmazonアプリストアの両方のマーケットおよびデバイスに同じAndroidベースのコードを使用して、両者に対応するアプリを開発しています。ただし、AmazonデバイスではGoogleのサービスではなくAmazonのサービスとAPIを使用するため、場合によっては異なる方法でコードのターゲットを設定する必要があります。また、Fire OSには次の2つのバージョンが用意されています。

  • Fire OS 5: Android 5.1ベース(Lollipop、APIレベル22)
  • Fire OS 6: Android 7.1ベース(Nougat、APIレベル25)

APIレベル25でサポートされる機能のみ存在する場合は、コードでこのレベルをターゲットにする必要があります。このドキュメントでは、機能、モデル、APIレベルに基づくAmazonデバイスの識別について詳しく説明します。

Amazon Fire TVデバイスを確認する理由

場合によっては、以下のようなさまざまな理由で、Amazon Fire TVデバイスをコードで確認する必要があります。

  • Fire OS 6デバイスでのみサポートされているNougat固有(APIレベル25以上)の機能を使用するため。
  • アプリがonPause()メソッドでDRMとHWのデコードパイプラインを切断する必要があるかどうかを判断するため(これは、Fire TVの第1世代では複数のDRMコンテキストを適切に処理できないために必要になります)。
  • UIを操作するためのD-Pad(ナビゲーション)コントローラーがTVプラットフォームに必要かどうかを確認するため。

機能とモデルによるAmazonデバイスの識別

amazon.hardware.fire_tvが機能として存在するかどうかを調べれば、Amazon Fire TVデバイスを識別できます。また、android.os.Build.MODELからパターンを選択することも可能です。次の表は、各Fire TVデバイスの機能とプロパティを示しています。同じ情報は、デバイスの仕様の「識別可能なプロパティ」セクションでもご覧いただけます。

Fire TV Stick 4K
機能/プロパティ
android.os.Build.MODEL AFTMM
android.os.Build.VERSION.SDK_INT 25
amazon.hardware.fire_tv
amazon.hardware.low_power
android.hardware.type.television
amazon.software.drm_teardown
Fire TV Cube(日本未対応)
機能/プロパティ
android.os.Build.MODEL AFTA
android.os.Build.VERSION.SDK_INT 25
amazon.hardware.fire_tv
amazon.hardware.low_power
android.hardware.type.television
amazon.software.drm_teardown
Fire TV(第3世代)
機能/プロパティ
android.os.Build.MODEL AFTN
android.os.Build.VERSION.SDK_INT 25
amazon.hardware.fire_tv
amazon.hardware.low_power
android.hardware.type.television
amazon.software.drm_teardown
Fire TV(第2世代)
機能/プロパティ
android.os.Build.MODEL AFTS
android.os.Build.VERSION.SDK_INT 22
amazon.hardware.fire_tv
amazon.hardware.low_power
android.hardware.type.television
amazon.software.drm_teardown
Fire TV(第1世代)
機能/プロパティ
android.os.Build.MODEL AFTB
android.os.Build.VERSION.SDK_INT 22
amazon.hardware.fire_tv
amazon.hardware.low_power
android.hardware.type.television
amazon.software.drm_teardown
Fire TV Stick(第2世代)
機能/プロパティ
android.os.Build.MODEL AFTT
android.os.Build.VERSION.SDK_INT 22
amazon.hardware.fire_tv
amazon.hardware.low_power
android.hardware.type.television
amazon.software.drm_teardown
Fire TV Stick(第1世代)
機能/プロパティ
android.os.Build.MODEL AFTM
android.os.Build.VERSION.SDK_INT 22
amazon.hardware.fire_tv
amazon.hardware.low_power
android.hardware.type.television
amazon.software.drm_teardown
Fire TV Edition(日本未対応)- Toshiba HD(2018)
機能/プロパティ
android.os.Build.MODEL AFTBAMR311
android.os.Build.VERSION.SDK_INT 25
amazon.hardware.fire_tv
amazon.hardware.low_power
android.hardware.type.television
amazon.software.drm_teardown
Fire TV Edition(日本未対応)- Toshiba 4K(2018)
機能/プロパティ
android.os.Build.MODEL AFTKMST12
android.os.Build.VERSION.SDK_INT 25
amazon.hardware.fire_tv
amazon.hardware.low_power
android.hardware.type.television
amazon.software.drm_teardown
Fire TV Edition(日本未対応)- Element 4K(2017)
機能/プロパティ
android.os.Build.MODEL AFTRS
android.os.Build.VERSION.SDK_INT 25
amazon.hardware.fire_tv
amazon.hardware.low_power
android.hardware.type.television
amazon.software.drm_teardown
Fire TV Edition(日本未対応)- Insignia 4K(2018)
機能/プロパティ
android.os.Build.MODEL AFTJMST12
android.os.Build.VERSION.SDK_INT 25
amazon.hardware.fire_tv
amazon.hardware.low_power
android.hardware.type.television
amazon.software.drm_teardown
Fire TV Edition(日本未対応)- Insignia HD(2018)
機能/プロパティ
android.os.Build.MODEL AFTEAMR311
android.os.Build.VERSION.SDK_INT 25
amazon.hardware.fire_tv
amazon.hardware.low_power
android.hardware.type.television
amazon.software.drm_teardown

amazon.hardware.fire_tvという機能を確認することで、すべてのFire TVデバイスを識別できます。この機能を取得するには、ContextオブジェクトのgetPackageManager()メソッドを呼び出し、hasSystemFeature()からcom.hardware.amazon.fire_tvが返されるかどうかを確認します。以下にコードのサンプルを示します。

final String AMAZON_FEATURE_FIRE_TV = "amazon.hardware.fire_tv";

if (getPackageManager().hasSystemFeature(AMAZON_FEATURE_FIRE_TV)) {
 Log.v(TAG, "はい、これはFire TVデバイスです。");
} else {
 Log.v(TAG, "いいえ、これはFire TVデバイスではありません。");
}

android.os.Build.MODELBuild.MANUFACTURER(これはAmazonを返します)を組み合わせることでも、Fire TVデバイスを識別できます。

ただし、Amazon以外のメーカーによってますます多くのAmazon対応デバイスが市場に投入されるようになるにつれて、android.os.Build.MODELBuild.MANUFACTURERの組み合わせでは正しく識別できない可能性も出てきました。そのため、将来のAmazon Fire TVデバイスにも対応できる、com.hardware.amazon.fire_tv機能に基づいたフォールバックアプローチを含めておくようにします。こちらは、モデルを調べるための代替アプローチを取り入れたコードの例です。

final String AMAZON_FEATURE_FIRE_TV = "amazon.hardware.fire_tv";
String AMAZON_MODEL = Build.MODEL;

if (AMAZON_MODEL.matches("AFTN")) {
 Log.v(TAG, "はい、これはFire TV第3世代デバイスです");
} else if (getPackageManager().hasSystemFeature(AMAZON_FEATURE_FIRE_TV)) {
 Log.v(TAG, "はい、これはFire TVデバイスです。");
} else {
 Log.v(TAG, "いいえ、これはFire TVデバイスではありません");
}

APIレベルの確認

Fire OS 5とFire OS 6のデバイス動作の違いを考慮する場合は、SDK_INTを使用してAPIレベルを確認することができます。バージョンのAPIレベルが25以上かどうかを調べるには、次のコードを使用します。

if (Build.VERSION.SDK_INT >= 25) {
 Log.v(TAG, "はい、これはAPIレベル25以上のデバイスです");
} else {
 Log.v(TAG, "いいえ、これはAPIレベル25以上のデバイスではありません");
}

このコードの場合、Fire OS 6デバイス(APIレベル25)のみがターゲットとなり、Fire OS 5デバイス(APIレベル22)は除外されます。Fire OS 5デバイスのみをターゲットにするには、ロジックを少し変えます。

if (Build.VERSION.SDK_INT <= 22) {
 Log.v(TAG, "はい、これはAPIレベル22以下のデバイスです");
} else {
 Log.v(TAG, "いいえ、これはAPIレベル22以下のデバイスではありません");
}

4Kに対応しているかどうかを確認

4K対応かどうかを確認するには、Androidの標準APIであるDisplay.Modeを使用します。これはAndroid 6.0で導入されたものです。Display.Modeでは、アプリが実際のディスプレイサイズに関する問い合わせを行い、別のHDMI表示モードに切り替えることができます。

Fire OS 5デバイス(Display.Modeがリリースされる前のAndroid 5.1ベース)の場合、Display.Modeも使用可能(これらのAPIをFire OSにバックポートしているため)ですが、その際はリフレクションを行ってください。4K拡張ライブラリも使用できます。このライブラリでは、リフレクションによってこれらのAndroid APIをラップし、API用のシンプルなインターフェイスを提供しています。詳細については、APIs for HDMI Mode Switchを参照してください。

プロパティおよび機能を確認するadbコマンド

デバイスに存在するプロパティや機能をadbで確認するには、以下を行います。

  1. adbに接続します。
  2. デバイスのプロパティを確認するには、adb shell getpropを実行します。
  3. デバイスの機能を確認するには、adb shell pm list featuresを実行します。