@@ -85,27 +85,27 @@ if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION)
</tr>
</tr>
<tr>
<tr>
<td>Touchscreen</td>
<td>Touchscreen</td>
<td>android.hardware.touchscreen</td>
<td>{@code android.hardware.touchscreen}</td>
</tr>
</tr>
<tr>
<tr>
<td>Telephony</td>
<td>Telephony</td>
<td>android.hardware.telephony</td>
<td>{@code android.hardware.telephony}</td>
</tr>
</tr>
<tr>
<tr>
<td>Camera</td>
<td>Camera</td>
<td>android.hardware.camera</td>
<td>{@code android.hardware.camera}</td>
</tr>
</tr>
<tr>
<tr>
<td>Near Field Communications (NFC)</td>
<td>Near Field Communications (NFC)</td>
<td>android.hardware.nfc</td>
<td>{@code android.hardware.nfc}</td>
</tr>
</tr>
<tr>
<tr>
<td>GPS</td>
<td>GPS</td>
<td>android.hardware.location.gps</td>
<td>{@code android.hardware.location.gps}</td>
</tr>
</tr>
<tr>
<tr>
<td>Microphone</td>
<td>Microphone</td>
<td>android.hardware.microphone</td>
<td>{@code android.hardware.microphone}</td>
</tr>
</tr>
</table>
</table>
@@ -142,20 +142,17 @@ if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION)
android:required="false"/>
android:required="false"/>
</pre>
</pre>
<p class="caution">
<p>
<strong>Caution:</strong> Declaring an unavailable hardware feature as required by setting its
All apps intended for use on TV devices must declare that the touch screen feature is not required
value to {@code true} in your app manifest prevents your app from being installed on TV
as described in <a href="{@docRoot}training/tv/start/start.html#no-touchscreen">Get Started with
devices or appearing in the Android TV home screen launcher.
TV Apps</a>. If your app normally uses one or more of the features listed above, change the
{@code android:required} attribute setting to {@code false} for those features in your manifest.
</p>
</p>
<p class="caution">
<p class="caution">
<strong>Caution:</strong> Some <a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">{@code uses-permission}</a> manifest declarations <em>imply hardware use</em>, which can also
<strong>Caution:</strong> Declaring a hardware feature as required by setting its
prevent your app from being installed and used on TV devices. For example, requesting the
value to {@code true} prevents your app from being installed on TV
{@link android.Manifest.permission#RECORD_AUDIO} permission in your app implies the
devices or appearing in the Android TV home screen launcher.
{@code android.hardware.microphone} hardware feature requirement. In which case, you must declare
the microphone feature as not required ({@code android:required="false"}) in your app manifest.
For a list of permission requests that imply a hardware feature requirement, see <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions-features">
{@code uses-feature}</a> guide.
</p>
</p>
<p>
<p>
@@ -172,6 +169,52 @@ if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION)
</p>
</p>
<h3 id="hardware-permissions">Declaring permissions that imply hardware features</h3>
<p>
Some <a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">{@code uses-permission}</a>
manifest declarations <em>imply hardware features</em>. This behavior means that requesting some
permissions in your app manifest can exclude your app from from being installed and used on TV
devices. The following commonly requested permissions create an implicit hardware feature