diff options
Diffstat (limited to 'docs/html/preview/tv/start/hardware-features.jd')
-rw-r--r-- | docs/html/preview/tv/start/hardware-features.jd | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/docs/html/preview/tv/start/hardware-features.jd b/docs/html/preview/tv/start/hardware-features.jd new file mode 100644 index 0000000..ddec496 --- /dev/null +++ b/docs/html/preview/tv/start/hardware-features.jd @@ -0,0 +1,183 @@ +page.title=Hardware Features on TV +page.tags="unsupported" + +@jd:body + +<div id="qv-wrapper"> +<div id="qv"> + <h2>In this document</h2> + <ol> + <li><a href="#unsupported-features">Unsupported Hardware Features</a></li> + <li><a href="#workaround-features">Handling Unsupported Features</a></li> + <li><a href="#check-features">Checking Available Features</a> + <ol> + <li><a href="#no-touchscreen">Touch screen</a></li> + <li><a href="#no-camera">Camera</a></li> + <li><a href="#no-gps">GPS</a></li> + </ol> + + </li> + </ol> +</div> +</div> + +<p>TVs do not have some of the hardware features found on other Android devices. +Touch screens, cameras, and GPS receivers are some of the most commonly used hardware features +which are typically not available on a TV. When you build an app for TV, you must carefully +consider if your app can handle not having these features and, if necessary, work around them.</p> + +<p>This guide discusses the hardware features not available on TV devices and shows you how to +work around those limitations in your app. For more information on filtering and declaring +features in the manifest, see the +<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">uses-feature</a> guide.</p> + + +<h2 id="unsupported-features">Unsupported Hardware Features</h2> + +<p>TVs have a different purpose from other devices, and so they do not have hardware +features that other Android-powered devices often have. For this reason, the Android system +does not support the following features for a TV device: + +<table> +<tr> +<th>Hardware</th> +<th>Android feature descriptor</th> +</tr> +<tr> +<td>Camera</td> +<td>android.hardware.camera</td> +</tr> +<tr> +<td>GPS</td> +<td>android.hardware.location.gps</td> +</tr> +<tr> +<td>Microphone</td> +<td>android.hardware.microphone</td> +</tr> +<tr> +<td>Near Field Communications (NFC)</td> +<td>android.hardware.nfc</td> +</tr> +<tr> +<td>Telephony</td> +<td>android.hardware.telephony</td> +</tr> +<tr> +<td>Touchscreen</td> +<td>android.hardware.touchscreen</td> +</tr> +</table> +</p> + + +<h2 id="check-features">Checking Available Features</h2> + +<p>To check if a feature is available at runtime, call {@link + android.content.pm.PackageManager#hasSystemFeature(String)}. This method takes a single string + argument that specifies the feature you want to check. For example, to check for a touch screen, + use {@link android.content.pm.PackageManager#hasSystemFeature(String)} with the argument + {@link android.content.pm.PackageManager#FEATURE_TOUCHSCREEN}.</p> + +<p>The following code example demonstrates how to detect the availability of a hardware features + at runtime:</p> + +<pre> +// Check if the telephony hardware feature is available. +if (getPackageManager().hasSystemFeature("android.hardware.telephony")) { + Log.d("Mobile Test", "Running on phone"); +// Check if android.hardware.touchscreen feature is available. +} else if (getPackageManager().hasSystemFeature("android.hardware.touchscreen")) { + Log.d("Tablet Test", "Running on devices that don't support telephony but "+ + "do have a touch screen."); +} else { + Log.d("TV Test", "Running on a TV!"); +} +</pre> + +<p class="note"> + <strong>Note:</strong> You can also use the {@link android.app.UiModeManager#getCurrentModeType + UiModeManager.getCurrentModeType()} method to detect the current platform type. For TV devices, + this method returns a value of {@link android.content.res.Configuration#UI_MODE_TYPE_TELEVISION + Configuration.UI_MODE_TYPE_TELEVISION}. +</p> + + +<h2 id="workaround-features">Handling Unsupported Features</h2> + +<p>Depending on the design and functionality of your app, you may be able to work around certain + hardware features being unavailable. This section discusses how to work around specific hardware + features.</p> + + +<h3 id="no-touchscreen">Touch screen</h3> + +<p>Android doesn't support touch screen interaction for TV devices, since most TVs don't have touch + screens, and using a touch screen is not consistent with a viewing environment where the user is + seated 10 feet away from the display.</p> + +<p>On TV devices, you should work around this limitation by supporting navigation using a directional + pad (D-pad) on TV remote control. For more information on properly supporting navigation using + TV-friendly controls, see <a href="{@docRoot}preview/tv/ui/navigation.html">Navigation for + TV</a>.</p> + +<p>You can explicitly declare if your application requires (or does not require) a touch screen + by including the following entry in your manifest:</p> + +<pre> +<uses-feature android:name="android.hardware.touchscreen" + android:required="false"/> +</pre> + + +<h3 id="no-camera">Camera</h3> + +<p>Although a TV typically does not have a camera, you can still provide a photography-related + application on a TV. For example, if you have an app that takes, views and edits photos, you can + disable its picture-taking functionality for TVs and still allow users to view and even edit + photos. If you decide that you want to enable your camera-related application to work on a + TV device without a camera, you can add an attribute to your app manifest declaring that + a camera is not required by your app:</p> + +<pre> +<uses-feature android:name="android.hardware.camera" android:required="false" /> +</pre> + +<p>If you enable your application to run without a camera, you should add code to your application +that detects if the camera feature is available and makes adjustments to the operation of your app. +The following code example demonstrates how to detect the presence of a camera:</p> + +<pre> +// Check if the camera hardware feature is available. +if (getPackageManager().hasSystemFeature("android.hardware.camera")) { + Log.d("Camera test", "Camera available!"); +} else { + Log.d("Camera test", "No camera available. View and edit features only."); +} +</pre> + + +<h3 id="no-gps">GPS</h3> + +<p>TVs are stationary, indoor devices, and do not have built-in global positioning system (GPS) + receivers. If your application uses location information, you can still allow users to search + for a location, or use a static location provider such as a zip code configured during the + TV device setup.</p> + +<pre> +LocationManager locationManager = (LocationManager) this.getSystemService( + Context.LOCATION_SERVICE); +Location location = locationManager.getLastKnownLocation("static"); +Geocoder geocoder = new Geocoder(this); +Address address = null; + +try { + address = geocoder.getFromLocation(location.getLatitude(), + location.getLongitude(), 1).get(0); + Log.d("Zip code", address.getPostalCode()); + +} catch (IOException e) { + Log.e(TAG, "Geocoder error", e); +} +</pre> + |