Frequently Asked Questions (FAQs) (Amazon Fire TV)

General

Q: How do I submit my app for the Amazon Fire TV platform?
To submit your app for an Amazon Fire TV device, create an account on the Amazon Apps & Games Developer Portal and submit your app through the portal.

If you already have an app published at Amazon, update that app to include a separate binary APK for Amazon Fire TV. See Using Device Targeting for more information.

Q: Will my app work on the Amazon Fire TV platform?
Your app must be compatible with the specifications for Amazon Fire TV devices. See Device Specifications for detailed device and feature specifications.

Your app must comply the Amazon Appstore Content Policy Requirements. Amazon also recommends that you test your app on your own and submit an update if you discover any problems.

Q: How can I identify whether my app is running on an Amazon Fire TV device?
You can check for the feature amazon.hardware.fire_tv. If you need to look for a specific Fire TV model, you can check for a model number or pattern but always include a fallback for the amazon.hardware.fire_tv feature. See Identifying Amazon Fire TV Devices for more information.
Q: Can I sideload my app onto Amazon Fire TV for testing?
Yes, with the Android Debug Bridge (ADB). See Getting Started Developing Apps and Games for Fire TV for more information. 
Q: Are Amazon Fire TV test devices available for developers?
Amazon does not provide test devices for developers.

Amazon Fire TV devices are available for purchase on Amazon retail sites in the US, UK, and Germany. Check the product detail pages for country-specific availability.

Q: What specific features does the Amazon Fire TV platform support?
See Device Specifications for detailed device and feature specifications. Fire TV is based on Android, so pretty much anything you can do on Android is available on Fire TV. Note that Fire OS has two versions: Fire OS 5 is based on Android 5.1 (Lollipop, API level 22). Fire OS 6 is based on Android 7.1 (Nougat, API level 25). See Developing for Amazon Fire TV Devices Running Fire OS 6 for more details. Also note that Fire TV does not support Google Services (such as Google Maps or Google In-App Billing). Use the Amazon SDKs for equivalent services. See How Fire TV Development Differs from Android TV Development for more details.
Q: What app templates are available to quickly build a Fire TV app?
You can use two app templates: Fire App Builder or Web App Starter Kit for Fire TV (WASK). Fire App Builder uses Java-based Android as the app framework, whereas WASK uses web technologies: HTML, CSS, and JS. See Amazon Development Framework Comparison for an in-depth comparison of the two.
Q: How do I get my app marketed on the Amazon Fire TV platform?
See Marketing Your App.
Q: How can I get more information about the Amazon Fire TV platform?
See the Fire TV Device Specifications page for in-depth details about hardware, software, and media specifications for each Fire TV device.
Q: Under what circumstances should my app pause, and how do I implement pause behavior?
Your app pauses when the Microphone (voice search) or Home buttons are pressed on one of the Fire TV remotes or on the Amazon Fire Game Controller (see Remote Control Input). The Back button also pauses the current activity and resumes the previous activity on the stack, which may or may not be your app.

To handle pause behavior, implement the onPause() method in your activity as you would in any other Android app. In your onPause() method, ensure that you save the user’s state or position, so that when your app resumes the user is in the same place that they were before the pause.

In addition, the following requirements apply to media apps:

  • Apps that play video should pause playback, and must release all media resources such as decoders immediately on pause, as these limited resources are hardware-based and memory-constrained. See Releasing the Media Player and MediaPlayer.release() for details.
  • Apps that play audio may continue playing after a pause, but must relinquish audio focus if requested by another app. See Audio Focus for details.
Q: Can I open an advertisement in the default web browser?
Amazon Fire TV does not include a browser app, so links to all URLs (advertisements or otherwise) do not work. You can use the Android WebView if you need to include a link to a web page in your app. Note, however, that the Android WebView requires you to manage your own cookies and authentication, as well as handle input events from controllers. (WebView in Android does support D-Pad navigation, but layout and navigation may need review.)

See the blog post Using WebViews on Tablets with HD Screens for tips on implementing an Android WebView. Although this post is specific to tablets, the advice can also be applied to TV.

Q: Can I use the Amazon In-App Purchasing API in my Fire TV app?
Yes, Amazon’s In-App Purchasing (IAP) API works on all Fire TV devices and with the Fire TV remotes and game controllers. For web apps, you can use App Tester to preview your transactions.
Q: Can I use Amazon Device Messaging (ADM) in my Fire TV app?
You can use Amazon Device Messaging to receive push messages and other data.
Q: Can I use the Amazon Maps API in my Fire TV app?
There are no location services in Amazon Fire TV, so the Amazon Maps API is not supported.
Q: Can I use the Amazon Mobile Ads API in my Fire TV app? 
The Amazon Mobile Ads API is not supported on Fire TV.
Q: Can I link to my app’s details page in the Amazon Appstore?
Yes, Amazon Appstore deep links work as they do for other apps. See Link to Amazon from within Your App for more information on deep linking. Note, however, that your app should not prompt the user for a rating. Users can rate your app from the app’s overview screen.
Q: How do I change the onscreen keyboard to a numeric keypad?
You can use the standard Android mechanisms for configuring the IME (input method editor) for any EditText widget. In XML, use android:inputType="number":
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/edittext"
android:inputType="number"/>
Q: How do I take screen shots on Amazon Fire TV?
See Taking Screenshots on Fire Devices for more details.
Q: My app uses Google’s in-app purchasing technology. Will it work on the Amazon Fire TV platform?
No. Services such as Google’s in-app purchasing API require access to Google Mobile Services, which do not work on the Amazon Fire TV platform. For in-app purchasing, Amazon offers an In-App Purchasing API that makes it easy for you to offer digital content and subscriptions in your apps. See How Fire TV Development Differs from Android TV Development for more details.
Q: Are there any other criteria for distributing apps for Amazon Fire TV or Fire TV Stick in Germany and/or Austria?
Yes. We do not permit apps to be distributed on Amazon Fire TV or on Fire TV Stick in Germany and/or Austria if the apps enable copying, recording, downloading, storing, or similar actions of any type of video or audio content onto the Amazon Fire TV or Fire TV Stick device or onto any SD memory card or any connected external storage (where applicable). If we determine that an app contains this functionality, we will not make it available in Germany and/or Austria.

Fire OS

Q: Does Fire OS support Android TV and the v17 Leanback Library?
Fire OS 5 and Fire OS 6 include both support for Android TV functionality and the Leanback Library. However, speech recognition with the Leanback library’s SearchFragment class is not unsupported. See Implementing Search in Fire TV for more details.

Media and DRM

Q: What third-party media player SDKs are supported by Fire TV?
Any media player SDKs that implement the Android media playback and encryption APIs work on the Amazon Fire TV platform.  Examples of these SDKs include the Amazon Port of the ExoPlayer, the Android MediaPlayer, the VisualOn OnStream MediaPlayer+ SDK, and the NexStreaming NexPlayer SDK. See Media Players for more details. If you’re using a custom media player, see Audio and Video Synchronization.
Q: What are my options for implementing playback of media encrypted with Microsoft PlayReady DRM?
The Amazon Fire TV platform includes support for the Android MediaCrypto class for playing protected media, or you can use a third-party media player SDK that supports PlayReady. See the Media Specifications table in the Fire TV Device Specifications for information about which Fire TV devices support which versions of PlayReady.
Q: Does Amazon Fire TV support PlayReady content that uses encrypted audio?
PlayReady content with encrypted video and clear (non-encrypted) audio is supported on Fire TV. Widevine DRM is also supported. See the Fire TV Device Specifications for more details. If you need to play content with both encrypted audio and video, please contact us for further information.
Q: How do I decode Dolby Digital audio on Fire TV devices?
Both Fire TV and Fire TV Stick contain decoders for Dolby Digital (AC3) and Dolby Digital Plus (eAC3). Fire TV (Gen 3) also provides support for Dolby Atmos (EC3_JOC). You should be able to play these formats with the standard Android media player libraries. Note that the DolbyAudioProcessing SDK for Amazon Fire tablets is not supported (or required) for Fire TV devices. For more information about playing Dolby, see Dolby Integration Guidelines.
Q: Does the device support Secure Boot to verify firmware and OS?
Yes.
Q: Does the OS enforce signature checking of apps?
Yes.
Q: Is output HDCP protected though a secure channel over HDMI?
Yes.
Q: Does Amazon Fire TV support customizable closed captioning (CEA-708)?
Fire TV has limited platform-level closed captioning support at this time. Media apps are responsible for and must implement a UI that enables viewers to customize captions through a third-party media playback SDK or their own implementation. For information on closed caption capabilities for Fire App Builder, see the Fire App Builder FAQ.
Q: What fonts are available on Amazon Fire TV for use with closed captions?
Amazon Fire TV includes limited platform fonts. You must license and embed your own font files for each of the style categories defined by CEA-708.

Media Playback

Q: What are best practices with media playback to preserve resources and memory?

Because the media playback resources in Amazon Fire TV are hardware-based and memory constrained, your app must be well-behaved and release the media resources when you are done with them.

Specifically, apps that play video should pause playback and must release all media resources such as decoders immediately in your onPause() method. See Releasing the Media Player and MediaPlayer.release() for details.

If your app plays video through an Android WebView (with the <video> HTML tag), hardware media resources are not currently released by the system when your app pauses or stops. To work around this issue, explicitly release these resources by killing the processes when you implement your onPause() and onStop() methods:

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

For more details, see the following:

Q: My app plays music in the background. When my app pauses, why does the audio stop playing? OR when my app starts, why does audio from another app keep playing?
Your app is not correctly Manage Audio Focus. When your app begins playing it should both request audio focus and register for media button events. When your app relinquishes audio focus (because you’re done playing or because another app has requested it), it should also unregister from media button events. Specifically:

See the following for more details:

Q: Why does my music app keep getting randomly killed when it’s playing in the background?
Make sure you are running your music playback app as a foreground service. Background services (the default) are automatically shut down by the system when resources are low. See the Android guide for Media Playback and the startForeground() method in the Service class for details.
Q: How should I handle the TV being turned off/disconnected with the HDMI cable?
The expected behavior for an HDMI disconnect is different for audio and video. See Handling HDMI Events for details.
Q: During media playback, how do I prevent the device from entering standby or daydream mode (screen saver)?
To keep both Amazon Fire TV and the television awake during media playback, set the KEEP_SCREEN_ON flag for your activity, or acquire a wake lock from the power manager. Your app must release all wake locks when it is not actively playing audio or video so that both the device and the television can sleep and preserve power. See the PowerManager and PowerManager.WakeLock classes for details on using wake locks.

Note that if your app plays audio and you set a partial wake lock for your app PARTIAL_WAKE_LOCK, the television remains on and when idle the device enters daydream mode (displays the screen saver). This is different behavior from a partial wake lock on a mobile device (where it keeps the CPU on, but turns the screen off), as audio playback over HDMI requires the television to be on. Again, make sure you release the wake lock when your app stops actively playing audio so that the television can sleep.

Setting the SCREEN_BRIGHT_WAKE_LOCK or SCREEN_DIM_WAKE_LOCK flags has no effect on the behavior of the device.

Q: How can I detect when the device has entered daydream mode (the screen saver is on)?
Daydream mode is an Android function. When Amazon Fire TV enters daydream mode it displays the screen saver if the TV is on. Register for Intent.ACTION_DREAMING_STARTED and Intent.ACTION_DREAMING_STOPPED to detect when the device enters or exits daydream.

Note that if your app plays audio but is not a music app, you should pause audio playback when the device enters daydream mode.

Q: Can I use an Android WebView and the <video> HTML tag for video playback?
Yes, with limitations. Hardware media resources are not currently released by the system when your app pauses or stops. To work around this issue implement your onStop() method to explicitly kill the process for your app:
public void onStop() {
super.onStop();
android.os.Process.killProcess(android.os.Process.myPid());
}

This issue may also cause instability in the user experience and navigation for your app. Use of a third-party media player SDK is the recommended method for media playback on the device.

Q: Can I play 4K Ultra HD Videos in my App?

Yes, Fire TV (Gen 2 and 3) and Fire TV (2nd Generation) can play 4K Ultra HD video when connected to a 4K-supported TV. Fire TV (1st Generation) and Fire TV Stick (1st Generation) do not play 4K videos. See Fire TV Device Specifications for details.

Before playing 4K content, your app needs to check whether (1) the Fire TV device supports 4k and (2) whether the connected TV supports 4K. An Amazon 4K Extension Library has been developed to allow you to initiate the 4K mode switch.

Apps that support Ultra HD video will be certified by Amazon to ensure they meet the required customer experience. Typically, certification takes a couple of weeks. See Playing 4K Ultra HD Videos for more details.

Controllers

Q: The Amazon Fire TV Game Controller does not have media buttons like the previous version did. How do I handle media playback?
Amazon Fire TV generates media input events for the analog stick presses (Play/Pause) and for the left (Rewind) and right (Fast Forward) shoulder buttons (L1/R1). If you do not use those buttons in your app or game, make sure you do not capture or throw away those button events so the user can control media playing in the background.

If you repurposed the media buttons on the Amazon Fire Game Controller for other purposes in your app, users of the new Amazon Fire Game Controller cannot use that functionality without the buttons. Consider updating your app to use buttons common to both game controllers, and updating your on-screen hints.

Q: How do I manage volume control from the Amazon Fire TV Game Controller?
Except for Fire TV (Gen 3), other Fire TV devices can stream audio to the headphone jack on the Amazon Fire Game Controller (current controller generation only). The left and right trigger buttons (L2/R2) are used to control the volume.

Volume control is a system function and cannot be mapped to other buttons in your app. However, if you do not use the trigger buttons in your app or game, make sure you do not capture or throw away those button events so the user can control media playing in the background. If you do use these buttons for other purposes in your app or game, consider providing an on-screen hint that the user can control the volume from the GameCircle screen or the system launcher.

Q: Can I override the Microphone button on the Fire TV Voice Remote in my app?
The Microphone button launches system-wide voice capabilities (requesting a transient audio focus) and cannot be overridden. Your application should handle this audio focus change event (AUDIOFOCUS_LOSS_TRANSIENT) as well as other audio focus change events too (AUDIOFOCUS_LOSS and AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK), since any application (not just voice) might request any kind of audio focus. In short, all audio focus use cases should be handled appropriately. See Handling Audio Focus with Voice Search for more details.
Q: What does the Menu button do, and can I override it in my app?
By default, the Menu button invokes the Android context menu, which appears as a list of menu items centered on the screen. You can override the menu button to provide your own custom menu user interface, or for any other purpose.

If you only have one menu item, consider using the Menu button as a simple toggle (for example, to turn closed captions on or off), and provide an onscreen hint to expose that feature to your users.

Q: Why is my activity restarted from scratch when a controller is connected, disconnected or sleeps?
These events are handled as runtime configuration changes by Android. To ignore these events in your app, modify your AndroidManifest.xml to include the android:configChanges attribute, and include keys for keyboard, keyboardHidden, and navigation:
<activity android:name="MyActivity"
android:configChanges="keyboard|keyboardHidden|navigation">

See the Android Guide Handling Runtime Changes for information on the configChanges attribute and how to handle configuration changes in your app, if necessary.

Q: How do I handle game controller disconnects in my app or game?
The Amazon Fire Game Controller may disconnect from the system if it is idle or if either stick is held at an angle for more than five minutes (to preserve battery life). Other controllers may also disconnect when idle or when battery life runs out. Use the Android OnInputDeviceRemoved listener to handle controller disconnection events. Consider pausing the game or displaying a dialog to let the user know the controller is no longer available.

Fire TV Stick

Q: What are the differences between Amazon Fire TV and Fire TV Stick?
Fire TV Device Specifications lists the specifications for all Fire TV devices. See Naming Conventions for Fire TV Devices for more clarity around Fire TV device names.
Q: How do I adapt my Amazon Fire TV app to Fire TV Stick?
Both Amazon Fire TV and Fire TV Stick run the same general platform (see Fire OS Overview). However, because of the more limited hardware on the Fire TV Stick, optimizing your app for performance and stability are critical. Make sure you follow Android best practices for hardware acceleration and performance. Watch out in particular for OpenGL and textures. See Fire TV Device Specifications for specific details about specifications for each Fire TV device.
Q: How can I identify an Fire TV Stick device programmatically?
You can check for the feature amazon.hardware.fire_tv to identify all Fire TV devices. To look for the Fire TV Stick, you can check for the MODEL AFTM or AFTT. See Identifying Amazon Fire TV Devices for more information.
Q: Some of the images/backgrounds in my app are not appearing, or I’m getting grey boxes for those images.
This is usually a result of bitmap images or textures that are too large. Fire TV Stick supports textures up to 2048x2048. You may see an error in the logs like this if your app has this problem:
W/OpenGLRenderer( 8941): Bitmap too large to be uploaded in a texture (3840x2160, max=2048x2048)

Also, make sure your images for Fire TV are in the drawables-xhdpi/ folder and not in drawables/. Platform scaling of the default drawables may result in large images that exceed the texture limit.