识别 Fire TV 设备


识别 Fire TV 设备

大多数 Amazon Fire TV 开发者同时为 Google Play 和亚马逊应用商店构建应用,使用基于安卓的相同代码,这些代码适用于这两个应用市场和设备。由于亚马逊设备不使用 Google 服务(它们使用亚马逊服务和 API),因此您可能需要以不同的方式确定您的目标代码。此外,Fire OS 也有两个版本:

  • Fire OS 5: 基于 Android 5.1(Lollipop,API 级别 22)
  • Fire OS 6: 基于 Android 7.1(Nougat,API 级别 25)

如果您的功能仅在 API 级别 25 上受支持,则需要在代码中定位此级别。本文档提供了有关根据功能、型号和 API 级别识别亚马逊设备的详细信息。

检查 Amazon Fire TV 设备的原因

出于多种原因,您可能需要在代码中检查 Amazon Fire TV 设备:

  • 您具有仅在 Fire OS 6 设备上受支持的特定于 Nougat(API 级别 25 及更高级别)功能。
  • 您想要确定应用是否需要在其 onPause() 方法中拆除 DRM 和 HW 解码管道(由于对多个 DRM 上下文的处理有限,Fire TV 第 1 代需要这样做)。
  • 您想检查电视平台是否需要方向键控制器来驱动 UI。

按功能和型号识别亚马逊设备

您可以通过查找 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/2019)
功能/属性 值​
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

所有 Fire TV 设备都可以通过功能 amazon.hardware.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, "Yes, this is a Fire TV device.");
} else {
 Log.v(TAG, "No, this is not a Fire TV device.");
}

您还可以通过将 android.os.Build.MODELBuild.MANUFACTURER(返回 Amazon)相结合来识别 Fire TV 设备。

但是,随着非亚马逊制造商将越来越多由亚马逊提供技术支持的设备推出市场,将 android.os.Build.MODELBuild.MANUFACTURER 相结合可能并不总是起作用。因此,应该为基于 com.hardware.amazon.fire_tv 功能的未来 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, "Yes, this is a Fire TV Gen 3 device");
} else if (getPackageManager().hasSystemFeature(AMAZON_FEATURE_FIRE_TV)) {
 Log.v(TAG, "Yes, this is a Fire TV device.");
} else {
 Log.v(TAG, "No, this is not a Fire TV device");
}

检查 API 级别

要考虑到 Fire OS 5 和 Fire OS 6 设备之间的不同行为,您可以使用 SDK_INT 检查 API 级别。以下代码检查版本是否大于等于 API 级别 25:

if (Build.VERSION.SDK_INT >= 25) {
 Log.v(TAG, "Yes, this is an API level 25 or higher device");
} else {
 Log.v(TAG, "No, this is not an API level 25 or higher device");
}

在本例中,代码将仅针对 Fire OS 6 设备(API 级别 25),并排除任何 Fire OS 5 设备(API 级别 22)。如果您只想针对 Fire OS 5 设备,则可以使用类似的逻辑:

if (Build.VERSION.SDK_INT <= 22) {
 Log.v(TAG, "Yes, this is an API level 22 or lower device");
} else {
 Log.v(TAG, "No, this is not an API level 22 or lower device");
}

检查是否支持 4K

要检查是否支持 4K,请使用 Android 6.0 中引入的标准安卓 Display.Mode API。Display.mode 允许应用查询物理显示尺寸并切换到不同的 HDMI 显示模式。

对于 Fire OS 5 设备(基于 Android 5.1,在 Display.Mode 发布之前),Display.Mode 也可用(由于这些 API 向后移植到 Fire OS),但必须使用反射。亚马逊提供了一个 4K 扩展库,通过反射包装这些安卓 API,并为它们提供了一个简单的界面。有关更多详细信息,请参阅 HDMI 模式切换的 API

使用 adb 命令来检查属性或功能

如果您想使用 adb 查看设备具有哪些属性或功能,可以执行以下操作:

  1. 连接到 adb
  2. 要查看设备的属性,请运行 adb shell getprop
  3. 要查看设备的功能,请运行 adb shell pm list features