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)
- Fire OS 8: Android 10ベース(APIレベル29)およびAndroid 11ベース(APIレベル30)。
このドキュメントでは、機能、モデル、APIレベルに基づくAmazonデバイスの識別について詳しく説明します。各Fire TVデバイスのFire OSバージョンについては、Fire TVのデバイス仕様を参照してください。
Amazon Fire TVデバイスを確認する理由
場合によっては、以下のようなさまざまな理由で、Amazon Fire TVデバイスをコードで確認する必要があります。
- Fire OS 8デバイスでのみサポートされているAndroid 10(APIレベル29)またはAndroid 11(APIレベル30)の機能を使用するため。
- 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を開発者コンソールにアップロードすると表示されます)。
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.MODEL
とBuild.MANUFACTURER
(これはAmazon
を返します)を組み合わせることでも、Fire TVデバイスを識別できます。
ただし、Amazon以外のメーカーによってますます多くのAmazon対応デバイスが市場に投入されるようになるにつれて、android.os.Build.MODEL
とBuild.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以上(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で確認するには、以下を行います。
- ADBに接続します。
- デバイスのプロパティを確認するには、
adb shell getprop
を実行します。 - デバイスの機能を確認するには、
adb shell pm list features
を実行します。
Last updated: 2024年2月9日