常见问题解答 (FAQ)


常见问题解答 (FAQ)

一般问题

问: 如何针对 Amazon Fire TV 平台提交我的应用?
要针对 Amazon Fire TV 设备提交您的应用,请在亚马逊应用和游戏开发者门户上创建一个账户,然后通过该门户提交您的应用。

如果您已经在亚马逊上发布了应用,请更新该应用以包含适用于 Amazon Fire TV 的单独 APK。 有关更多信息,请参阅使用设备定位

问: 我的应用是否可以在 Amazon Fire TV 平台上运行?
您的应用必须与 Amazon Fire TV 设备的规格兼容。请参阅设备规格了解详细的设备和功能规格。

您的应用必须符合亚马逊应用商店内容政策要求。亚马逊还建议您自行测试应用,并在发现任何问题时提交更新。

问: 如何识别我的应用是否在 Amazon Fire TV 设备上运行?
您可以检查功能 amazon.hardware.fire_tv。如果您需要查找特定的 Fire TV 型号,可以检查型号或模式,但始终包含 amazon.hardware.fire_tv 功能的回退。有关更多信息,请参阅识别 Amazon Fire TV 设备
问: 我可以将我的应用旁加载到 Amazon Fire TV 上进行测试吗?
是的,使用安卓调试桥 (adb)。 有关更多信息,请参阅开发 Fire TV 应用和游戏入门。 
问: 是否有可供开发者使用的 Amazon Fire TV 测试设备?
亚马逊不为开发者提供测试设备。

Amazon Fire TV 设备可在 美国英国德国的亚马逊零售网站上购买。查看商品详情页面,了解特定国家/地区的可用性。

问: Amazon Fire TV 平台支持哪些特定功能?
请参阅设备规格了解详细的设备和功能规格。Fire TV 是基于安卓的,所以您在安卓上可以做的几乎任何事情都可以在 Fire TV 上进行。请注意,Fire OS 有两个版本: Fire OS 5 是基于 Android 5.1(Lollipop,API 级别 22)。Fire OS 6 是基于 Android 7.1(Nougat,API 级别 25)。有关更多详细信息,请参阅针对运行 Fire OS 6 的 Amazon Fire TV 设备进行开发。另请注意,Fire TV 不支持 Google 服务(如 Google 地图或 Google 应用内计费)。使用 Amazon SDK 获得等效服务。有关更多详细信息,请参阅 Fire TV 开发与 Android TV 开发的不同之处
问: 哪些应用模板可用于快速构建 Fire TV 应用?
您可以使用两个应用模板: Fire App Builder适用于 Fire TV 的 Web 应用初学者工具包 (WASK)。Fire App Builder 使用基于 Java 的安卓作为应用框架,而 WASK 使用 Web 技术: HTML、CSS 和 JS。请参阅亚马逊开发框架比较,了解两者的深入比较。
问: 如何让我的应用在 Amazon Fire TV 平台上销售?
查看推广您的应用
问: 如何获取有关 Amazon Fire TV 平台的更多信息?
有关每种 Fire TV 设备的硬件、软件和媒体规格的详细信息,请参阅 Fire TV 设备规格页面
问: 我的应用应该在什么情况下暂停,以及如何实现暂停行为?
当按下 Fire TV 遥控器之一或 Amazon Fire 游戏控制器上的麦克风(语音搜索)或主页按钮时,您的应用将暂停(请参阅遥控输入)。“返回”按钮也会暂停当前活动并恢复堆栈上之前的活动,这可能是也可能不是您的应用。

要处理暂停行为,请在活动中实现 onPause() 方法,就像在任何其他安卓应用中一样。在 onPause() 方法中,请确保您保存用户的状态或位置,以便当您的应用恢复时,用户位于暂停前的相同位置。

此外,以下要求适用于媒体应用:

  • 播放视频的应用应暂停播放,并且必须在暂停时立即释放所有媒体资源(如解码器),因为这些有限的资源基于硬件且受内存约束。有关详细信息,请参阅释放媒体播放器MediaPlayer.release()
  • 播放音频的应用可能会在暂停后继续播放,但如果其他应用请求,则必须放弃音频焦点。有关详细信息,请参阅音频焦点
问: 我可以在 Fire TV 应用中使用亚马逊应用内购买 API 吗?
可以,亚马逊的应用内购买 (IAP) API 适用于所有 Fire TV 设备以及 Fire TV 遥控器和游戏控制器。对于 Web 应用,您可以使用 App Tester 来预览您的交易。
问: 我可以在我的 Fire TV 应用中使用 Amazon Device Messaging (ADM) 吗?
您可以使用 Amazon Device Messaging 接收推送消息和其他数据。
问: 我可以在我的 Fire TV 应用中使用 Amazon Maps API 吗?
Amazon Fire TV 中没有定位服务,因此不支持 Amazon Maps API
问: 我可以在我的 Fire TV 应用中使用亚马逊移动广告 API 吗? 
Fire TV 不支持亚马逊移动广告 API
问: 我可以链接到我的应用在亚马逊应用商店中的详情页面吗?
是的,亚马逊应用商店深层链接与针对其他应用的工作方式相同。有关深层链接的更多信息,请参阅从您的应用内链接至亚马逊。但请注意,您的应用不应提示用户进行评分。用户可以从应用的概览屏幕对您的应用进行评分。
问: 如何将屏幕键盘更改为数字键盘?
您可以使用标准的安卓机制为任何 EditText 小部件配置 IME(输入法编辑器)。在 XML 中,使用 android:inputType="number"
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/edittext"
android:inputType="number"/>
问: 如何在 Amazon Fire TV 上截屏?
有关更多详细信息,请参阅在 Fire 设备上截图
问: 我的应用使用谷歌的应用内购买技术。它可以在 Amazon Fire TV 平台上工作吗?
不能。谷歌的应用内购买 API 等服务需要访问谷歌移动服务,这些服务在 Amazon Fire TV 平台上无法使用。对于应用内购买,亚马逊提供了应用内购买 API,利用它,您可以轻松地在您的应用内提供数字内容和订阅。有关更多详细信息,请参阅 Fire TV 开发与 Android TV 开发的不同之处
问: 在德国和/或奥地利为 Amazon Fire TV 或 Fire TV Stick 分发应用是否有其他标准?
是。​如果应用允许将任何类型的视频或音频内容复制、录制、下载、存储到 Amazon Fire TV 或 Fire TV Stick 设备、任何 SD 存储卡或任何连接的外部存储(如适用),或者执行类似操作,我们不允许在德国和/或奥地利的 Amazon Fire TV 或 Fire TV Stick 上分发应用。如果我们确定某个应用包含此功能,我们将不会在德国和/或奥地利提供该功能。

Fire OS

问: Fire OS 是否支持 Android TV 和 v17 Leanback 库?
Fire OS 5 和 Fire OS 6 包括对 Android TV 功能和 Leanback 库的支持。不过,不支持使用 Leanback 库的 SearchFragment 类进行语音识别。有关更多详细信息,请参阅在 Fire TV 中实施搜索

媒体和 DRM

问: Fire TV 支持哪些第三方媒体播放器 SDK?
任何实现安卓媒体播放和加密 API 的媒体播放器 SDK 都可以在 Amazon Fire TV 平台上运行。  这些 SDK 的示例包括 Amazon ExoPlayer 端口Android MediaPlayerVisualOn OnStream MediaPlayer+ SDKNexStreaming NexPlayer SDK。请参阅媒体播放器了解更多详细信息。如果您使用的是自定义媒体播放器,请参阅音频和视频同步
问: 我有什么选项来实现使用 Microsoft PlayReady DRM 加密的媒体的播放功能?
Amazon Fire TV 平台支持用来播放受保护媒体的安卓 MediaCrypto 类,您也可以使用支持 PlayReady 的第三方媒体播放器 SDK。有关哪些 Fire TV 设备支持哪些版本的 PlayReady 的信息,请参阅 Fire TV 设备规格中的媒体规格表。
问: Amazon Fire TV 是否支持使用加密音频的 PlayReady 内容?
Fire TV 支持包含加密视频和明文(非加密)音频的 PlayReady 内容。此外,还支持 Widevine DRM。有关更多详细信息,请参阅 Fire TV 设备规格。如果您需要播放包含加密音频和视频的内容,请与我们联系以获取更多信息。
问: 如何在 Fire TV 设备上解码 Dolby Digital 音频?
Fire TV 和 Fire TV Stick 都包含 Dolby Digital (AC3) 和 Dolby Digital Plus (eAC3) 的解码器。Fire TV(第 3 代)还提供了对 Dolby Atmos (EC3_JOC) 的支持。您应该能够使用标准的安卓媒体播放器库播放这些格式。请注意,Fire TV 设备不支持(或需要)适用于 Amazon Fire 平板电脑的 DolbyAudioProcessing SDK。有关播放杜比内容的更多信息,请参阅杜比集成指南
问: 设备是否支持安全启动来验证固件和操作系统?
是。​
问: 操作系统是否强制执行应用的签名检查?
是。​
问: 输出 HDCP 是否通过 HDMI 上的安全通道加以保护?
是。​
问: Amazon Fire TV 是否支持可定制的隐藏式字幕 (CEA-708)?
Fire TV 目前拥有有限的平台级隐藏式字幕支持。媒体应用负责并且必须实现 UI,使观看者能够通过第三方媒体播放 SDK 或他们自己的实现定制字幕。

如果您使用的是 Amazon ExoPlayer 端口,请注意,4K 流 (DASH) 的字幕样式通过 ExoPlayer 的嵌入式样式处理。要忽略嵌入样式,您可以使用 playerView.subtitleView.setApplyEmbeddedStyles(false)。但是,请咨询 ExoPlayer 论坛了解更多信息,因为这是 ExoPlayer 问题,而不是特定于亚马逊的问题。(有关 Fire App Builder 的隐藏式字幕功能的信息,请参阅字幕支持。)

问: Amazon Fire TV 上有哪些字体可用于隐藏式字幕?
Amazon Fire TV 包含有限的平台字体。您必须为 CEA-708 定义的每个样式获得许可并嵌入您自己的字体文件。

媒体播放

问: 媒体播放节省资源和内存的最佳实践是什么?

由于 Amazon Fire TV 中的媒体播放资源基于硬件且受内存限制,因此您的应用必须运行良好,并在使用完媒体资源时释放媒体资源。

具体而言,播放视频的应用应该暂停播放,并且必须立即释放所有媒体资源,例如 onPause() 方法中的解码器。有关详细信息,请参阅释放媒体播放器MediaPlayer.release

如果您的应用通过 Android WebView(带有 <video> HTML 标签)播放视频,则当您的应用暂停或停止时,系统当前不会释放硬件媒体资源。要变通解决此问题,请在实现 onPause()onStop() 方法时通过终止进程来显式释放这些资源:

public void onStop() {
   super.onStop();
   android.os.Process.killProcess(android.os.Process.myPid());
}

有关更多详细信息,请参阅以下内容:

问: 我的应用在后台播放音乐。当我的应用暂停时,音频为什么停止播放? 或者当我的应用启动时,为什么来自另一个应用的音频继续播放?
您的应用未正确管理音频焦点。当您的应用开始播放时,它应该请求音频焦点并注册媒体按钮事件。当您的应用放弃音频焦点时(因为您已完成播放或因为其他应用请求了音频焦点),它也应该从媒体按钮事件中取消注册。具体来说:

有关更多详细信息,请参阅以下内容:

问: 为什么我的音乐应用在后台播放时不断被随机终止?
请确保将音乐播放应用作为前台服务运行。当资源不足时,系统会自动关闭后台服务(默认设置)。有关详细信息,请参阅媒体播放Service 类中的 startForeground() 方法。
问: 我应该如何处理关闭/与 HDMI 线缆断开连接的电视机?
HDMI 断开连接的预期行为对于音频和视频是不同的。有关详细信息,请参阅处理 HDMI 事件
问: 在媒体播放过程中,如何防止设备进入待机模式或白日梦模式(屏保)?
要在媒体播放期间保持 Amazon Fire TV 和电视机处于唤醒状态,请为您的活动设置 KEEP_SCREEN_ON 标记,或从电源管理器获取唤醒锁。当您的应用未主动播放音频或视频时,它必须释放所有唤醒锁,以便设备和电视机都可以进入睡眠状态并节省电力。有关使用唤醒锁的详细信息,请参阅 PowerManagerPowerManager.WakeLock 类。

请注意,如果您的应用播放音频,并且您为应用设置了部分唤醒锁 PARTIAL_WAKE_LOCK,电视机将保持打开状态,当电视进入空闲状态时,设备进入白日梦模式(显示屏保)。这与移动设备上的部分唤醒锁的行为不同(在移动设备中,它保持 CPU 开启,但关闭屏幕),因为通过 HDMI 播放音频需要电视机处于打开状态。同样,请确保在应用停止主动播放音频时释放唤醒锁,以便电视机可以进入睡眠状态。

设置 SCREEN_BRIGHT_WAKE_LOCKSCREEN_DIM_WAKE_LOCK 标记不会影响设备的行为。

问: 如何检测设备何时进入白日梦模式(屏保打开)?
白日梦模式是一个安卓功能。当 Amazon Fire TV 进入白日梦模式时,如果电视已打开,则会显示屏幕保护程序。注册 Intent.ACTION_DREAMING_STARTEDIntent.ACTION_DREAMING_STOPPED 以检测设备何时进入或退出白日梦模式。

请注意,如果您的应用播放音频但不是音乐应用,则应在设备进入白日梦模式时暂停音频播放。

问: 我可以使用安卓 WebView<video> HTML 标签进行视频播放吗?
可以,但有限制。当您的应用暂停或停止时,系统当前不会释放硬件媒体资源。要变通解决此问题,请实现 onStop() 方法来显式终止应用的进程:
public void onStop() {
super.onStop();
android.os.Process.killProcess(android.os.Process.myPid());
}

此问题也可能导致您的应用的用户体验和导航不稳定。使用第三方媒体播放器 SDK 是在设备上播放媒体的推荐方法。

问: 我可以在我的应用中播放 4K 超高清视频吗?

可以,Fire TV(第 2 代和第 3 代)和 Fire TV(第 2 代)可以在连接到支持 4K 的电视时播放 4K 超高清视频。Fire TV(第 1 代)和 Fire TV Stick(第 1 代)不播放 4K 视频。有关详细信息,请参阅 Fire TV 设备规格

播放 4K 内容之前,您的应用需要检查 (1) Fire TV 设备是否支持 4K,(2) 连接的电视是否支持 4K。已经开发了一个 Amazon 4K 扩展库,允许您启动 4K 模式切换。

支持超高清视频的应用将获得亚马逊认证,以确保它们符合所需的客户体验。通常情况下,认证需要几周时间。请参阅 4K 超高清规格了解更多详情。

控制器

问: Amazon Fire TV 游戏控制器没有像以前版本那样的媒体按键。如何处理媒体播放?
Amazon Fire TV 为摇杆按压(播放/暂停)以及左(倒回)和右(快进)侧肩按键 (L1/R1) 生成媒体输入事件。如果您未在应用或游戏中使用这些按钮,请确保不捕获或丢弃这些按钮事件,以便用户可以控制后台的播放媒体。

如果您将 Amazon Fire 游戏控制器上的媒体按钮重新用于应用中的其他用途,则新的 Amazon Fire 游戏控制器的用户在没有这些按钮的情况下将无法使用该功能。考虑更新应用以使用两个游戏控制器通用的按钮,并更新屏幕上的提示。

问: 如何从 Amazon Fire TV 游戏控制器管理音量控制?
除 Fire TV(第 3 代)外,其他 Fire TV 设备可以将音频流传输到 Amazon Fire 游戏控制器上的耳机插孔(仅限当前一代控制器)。左右触发按钮 (L2/R2) 用于控制音量。

音量控制是一种系统功能,无法映射到应用中的其他按钮。但是,如果您未在应用或游戏中使用按钮,请确保不捕获或丢弃这些按钮事件,以便用户可以控制后台的播放媒体。

问: 我可以在应用中覆盖 Fire TV 语音遥控器上的麦克风按钮吗?
“麦克风”按钮启动系统范围的语音功能(请求暂时音频焦点),无法覆盖。您的应用应该处理此音频焦点变更事件 (AUDIOFOCUS_LOSS_TRANSIENT) 以及其他音频焦点变更事件(AUDIOFOCUS_LOSSAUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK),因为任何应用(不仅仅是语音)可能会请求任何类型的音频焦点。简而言之,应适当处理所有音频焦点使用情形。有关更多详细信息,请参阅使用语音搜索处理音频焦点
问: 菜单按钮有什么作用,我可以在我的应用中覆盖它吗?
默认情况下,“菜单”按钮调用安卓上下文菜单,该菜单显示为屏幕中心的菜单项列表。您可以覆盖菜单按钮以提供您自己的自定义菜单用户界面,或用于任何其他目的。

如果您只有一个菜单项,请考虑使用“菜单”按钮作为一个简单的切换(例如,打开或关闭隐藏式字幕),并提供屏幕提示以向用户公开该功能。

问: 为什么当控制器连接、断开连接或进入睡眠状态时,我的活动会从头重新开始?
这些事件由安卓作为运行时配置更改进行处理。要忽略应用中的这些事件,请修改您的 AndroidManifest.xml 以包含 android:configChanges 属性,并包含 keyboardkeyboardHiddennavigation 键:
<activity android:name="MyActivity"
android:configChanges="keyboard|keyboardHidden|navigation">

有关 configChanges 属性以及如何处理应用中的配置更改的信息,请参阅安卓指南处理运行时更改

问: 如何处理我的应用或游戏中的游戏控制器断开连接?
如果 Amazon Fire 游戏控制器处于空闲状态,或者其中任一操纵杆以某个角度保持超过 5 分钟,则 Amazon Fire 游戏控制器可能会断开与系统的连接,以节省电池电量。当处于空闲状态或电池电量耗尽时,其他控制器也可能断开连接。使用安卓 OnInputDeviceRemoved 侦听器来处理控制器断开连接事件。考虑暂停游戏或显示对话框,让用户知道控制器不再可用。

Fire TV Stick

问: Amazon Fire TV 和 Fire TV Stick 有何区别?
Fire TV 设备规格列出了所有 Fire TV 设备的规格。有关 Fire TV 设备名称的更多详细信息,请参阅 Fire TV 设备的命名约定
问: 如何将我的 Amazon Fire TV 应用调整为 Fire TV Stick?
Amazon Fire TV 和 Fire TV Stick 运行相同的通用平台(请参阅 Fire OS 概述)。但是,由于 Fire TV Stick 上的硬件有限,因此优化应用的性能和稳定性至关重要。请确保遵循有关硬件加速性能的安卓最佳实践。特别注意 OpenGL 和纹理。有关每种 Fire TV 设备规格的具体详细信息,请参阅 Fire TV 设备规格
问: 如何以编程方式识别 Fire TV Stick 设备?
您可以检查功能 amazon.hardware.fire_tv 以识别所有 Fire TV 设备。要查找 Fire TV Stick,您可以查看型号 AFTMAFTT。有关更多信息,请参阅识别 Amazon Fire TV 设备
问: 我的应用中的一些图像/背景没有出现,或者这些图像显示为灰色框。
这通常是由于位图图像或纹理过大导致的。Fire TV Stick 支持高达 2048x2048 的纹理。如果您的应用出现此问题,您可能会在日志中看到如下错误:
W/OpenGLRenderer( 8941): 位图太大,无法在纹理中上传(3840x2160,最大值为 2048x2048)

此外,请确保您的 Fire TV 的图像位于 drawables-xhdpi/ 文件夹中,而不是 drawables/ 中。默认绘图的平台缩放可能会导致大图像超出纹理限制。