開発者コンソール

Fire TVデバイスの識別


Fire TVデバイスの識別

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

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

このドキュメントでは、機能、モデル、APIレベルに基づくAmazonデバイスの識別について詳しく説明します。各Fire TVデバイスのFire OSバージョンについては、Fire TVのデバイス仕様を参照してください。

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

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

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

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

amazon.hardware.fire_tvが機能として存在するかどうかを調べれば、Amazon Fire TVデバイスを識別できます。また、android.os.Build.MODELからパターンを選択することも可能です。各デバイスのビルドモデルについては、Fire TVのデバイス仕様を参照してください。次の画像は、各デバイスのビルドモデルを示したものです(このダイアログは、APKを開発者コンソールにアップロードすると表示されます)。

Fire TVデバイスのモデル名
Fire TVデバイスのモデル名
Fire TVデバイス ビルドモデル Androidレベル Fire OSのバージョン
Fire TV Edition(日本未対応)- Onida HD(2019) AFTLE APIレベル25(Android 7.1) Fire OS 6
Fire TV Cube(第2世代) AFTR Androidレベル28(Android 9) Fire OS 7
Fire TV Edition(日本未対応)- Grundig OLED 4K(2019) AFTEUFF014 Androidレベル28(Android 9) Fire OS 7
Fire TV Edition(日本未対応)- Grundig Vision 7 4K(2019) AFTEU014 Androidレベル28(Android 9) Fire OS 7
Fire TV Edition(日本未対応)- JVC 4K(2019) AFTSO001 Androidレベル28(Android 9) Fire OS 7
Fire TV Edition(日本未対応)- Nebulaサウンドバー(2019) AFTMM APIレベル25(Android 7.1) Fire OS 6
Fire TV Edition(日本未対応)- Grundig Vision 6 HD(2019) AFTEU011 Androidレベル28(Android 9) Fire OS 7
Fire TV Edition(日本未対応)- Toshiba 4K(2018/2019) AFTKMST12 APIレベル25(Android 7.1) Fire OS 6
Fire TV Edition(日本未対応)- Insignia 4K(2018) AFTJMST12 APIレベル25(Android 7.1) Fire OS 6
Fire TV Edition(日本未対応)- Toshiba HD(2018-2020) AFTBAMR311 APIレベル25(Android 7.1) Fire OS 6
Fire TV Edition(日本未対応)- Insignia HD(2018-2020) AFTEAMR311 APIレベル25(Android 7.1) Fire OS 6
Fire TV Cube(第1世代、日本未対応) AFTA APIレベル25(Android 7.1) Fire OS 6
Fire TV(第3世代) AFTN APIレベル25(Android 7.1) Fire OS 6
Fire TV Stick 4K AFTMM APIレベル25(Android 7.1) Fire OS 6
Fire TV Edition(日本未対応)- Element 4K(2017) AFTRS Androidレベル22(Android 5.1) Fire OS 5
Fire TV(第2世代) AFTS Androidレベル22(Android 5.1) Fire OS 5
Fire TV Stick(第2世代) AFTT Androidレベル22(Android 5.1) Fire OS 5
Fire TV Stick(第1世代) AFTM Androidレベル22(Android 5.1) Fire OS 5
Fire TV Stick(Basic Edition)(日本未対応) AFTT Androidレベル22(Android 5.1) Fire OS 5
Fire TV(第1世代) AFTB Androidレベル22(Android 5.1) Fire OS 5

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レベルの確認

Android APIレベルに応じた条件付き動作を実装するために、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および7デバイス(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を実行します。