Le matériel TV est très différent des autres appareils Android. Les téléviseurs ne incluent certaines des fonctionnalités matérielles présentes sur d'autres appareils Android, comme les écrans tactiles, les caméras et les récepteurs GPS. Par ailleurs, les téléviseurs dépendent entièrement de périphériques matériels secondaires: pour que les utilisateurs puissent interagir avec les applications TV, ils doivent utiliser une télécommande ou une manette de jeu. (Pour en savoir plus sur différentes méthodes de saisie, consultez la section Gérer les manettes de téléviseur.)
Lorsque vous créez une application pour TV, tenez bien compte des limites et des exigences matérielles sur du matériel TV. Vérifier si votre appli s'exécute sur un téléviseur et si elle n'est pas compatible caractéristiques matérielles.
Rechercher un téléviseur
Si vous créez une application qui fonctionne à la fois sur des téléviseurs et sur d'autres appareils, vous devrez peut-être
vérifier le type d'appareil sur lequel votre application s'exécute et ajuster le fonctionnement de votre application. Pour
Si vous avez une application qui peut être démarrée via un Intent
,
vérifier les propriétés de l'appareil pour déterminer s'il faut démarrer un
ou de votre téléphone.
La méthode recommandée pour déterminer si votre appli s'exécute sur un téléviseur consiste à utiliser la méthode PackageManager.hasSystemFeature()
pour vérifier
si l'appareil fonctionne en mode télévision. L'exemple de code suivant vous montre comment vérifier
votre application s'exécute sur un téléviseur:
Kotlin
const val TAG = "DeviceTypeRuntimeCheck" val isTelevision = packageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK) if (isTelevision) { Log.d(TAG, "Running on a TV Device") } else { Log.d(TAG, "Running on a non-TV Device") }
Java
public static final String TAG = "DeviceTypeRuntimeCheck"; boolean isTelevision = getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK); if (isTelevision) { Log.d(TAG, "Running on a TV Device"); } else { Log.d(TAG, "Running on a non-TV Device"); }
Gérer les fonctionnalités matérielles non compatibles
Selon la conception et les fonctionnalités de votre application, vous pourrez peut-être contourner certaines fonctionnalités matérielles indisponibles. Cette section décrit les fonctionnalités matérielles généralement non disponible pour les téléviseurs, comment détecter les fonctionnalités matérielles manquantes et les alternatives suggérées ces fonctionnalités.
Fonctionnalités matérielles non compatibles avec le téléviseur
Les téléviseurs ont une fonction différente de celle des autres appareils, ils n'ont donc pas de fonctionnalités matérielles qui d'autres appareils Android. C'est pourquoi le système Android ne prend pas en charge les fonctionnalités suivantes pour un téléviseur:
Matériel | Descripteur de fonctionnalité Android |
---|---|
Écran tactile | android.hardware.touchscreen |
Émulateur d'écran tactile | android.hardware.faketouch |
Téléphonie | android.hardware.telephony |
Appareil photo | android.hardware.camera |
Technologie NFC (communication en champ proche) | android.hardware.nfc |
GPS | android.hardware.location.gps |
Micro | android.hardware.microphone |
Capteurs | android.hardware.sensor |
Écran en mode portrait | android.hardware.screen.portrait |
Remarque:Certaines manettes de téléviseur sont équipées d'un micro, n'est pas la même que la fonctionnalité matérielle du micro décrite ici. Le micro de la manette est complètement compatibles.
Consultez les Documentation de référence sur les caractéristiques pour obtenir la liste complète des caractéristiques, des sous-caractéristiques et de leurs descripteurs.
Déclarer la configuration matérielle requise pour le téléviseur
Les applications Android peuvent déclarer les fonctionnalités matérielles requises dans leur fichier manifeste pour s'assurer qu'elles ne sont pas installées sur des appareils qui ne proposent pas ces fonctionnalités. Si vous étendez un réseau existant application pour un téléviseur, vérifiez attentivement le fichier manifeste de votre application pour vérifier qu'elle ne nécessite pas de matériel spécifique. qui pourraient empêcher son installation sur un téléviseur.
Si votre application utilise des fonctionnalités matérielles, comme un écran tactile ou une caméra, qui ne sont pas disponibles sur mais il peut fonctionner sans utiliser ces fonctionnalités. Modifiez le fichier manifeste de votre appli pour indiquent que ces fonctionnalités ne sont pas requises. L'extrait de code suivant du fichier manifeste montre comment déclarer que votre application ne nécessite pas de fonctionnalités matérielles indisponibles sur les téléviseurs, mais qui utilise ces fonctionnalités sur des appareils autres que des téléviseurs:
<uses-feature android:name="android.hardware.touchscreen" android:required="false"/> <uses-feature android:name="android.hardware.faketouch" android:required="false"/> <uses-feature android:name="android.hardware.telephony" android:required="false"/> <uses-feature android:name="android.hardware.camera" android:required="false"/> <uses-feature android:name="android.hardware.nfc" android:required="false"/> <uses-feature android:name="android.hardware.location.gps" android:required="false"/> <uses-feature android:name="android.hardware.microphone" android:required="false"/> <uses-feature android:name="android.hardware.sensor" android:required="false"/> <!-- Some TV devices have an ethernet connection only --> <uses-feature android:name="android.hardware.wifi" android:required="false"/>
Remarque:Certaines fonctionnalités ont des sous-fonctionnalités, comme android.hardware.camera.front
,
comme décrit dans les
Documentation de référence sur les fonctionnalités Veillez à marquer toutes les sous-fonctionnalités également utilisées dans votre application comme required="false"
.
Toutes les applications destinées à être utilisées sur des téléviseurs doivent déclarer que la fonctionnalité d'écran tactile n'est pas requise.
comme décrit dans la section Premiers pas avec
des applications TV. Si votre application utilise normalement une ou plusieurs fonctionnalités non compatibles avec les téléviseurs, modifiez
Le paramètre d'attribut android:required
est défini sur false
pour ces fonctionnalités dans votre fichier manifeste.
Attention:Déclarer une fonctionnalité matérielle requise en définissant son
La valeur sur true
empêche l'installation de votre appli sur le téléviseur.
appareils ou qui apparaissent dans le lanceur d'applications de l'écran d'accueil d'Android TV.
Tenir compte des autorisations qui impliquent des fonctionnalités matérielles
Certaines uses-permission
les déclarations du fichier manifeste concernent simplement les fonctionnalités matérielles. Par conséquent, si vous demandez
les autorisations dans le fichier manifeste de votre appli peuvent empêcher l'installation et l'utilisation de celle-ci sur un téléviseur
appareils. Les autorisations couramment demandées ci-dessous créent une fonctionnalité matérielle implicite.
exigence:
Autorisation | Fonctionnalité matérielle implicite |
---|---|
RECORD_AUDIO |
android.hardware.microphone |
CAMERA |
android.hardware.camera et android.hardware.camera.autofocus |
ACCESS_COARSE_LOCATION |
|
ACCESS_FINE_LOCATION |
|
ACCESS_WIFI_STATE CHANGE_WIFI_STATE
|
Certains téléviseurs ne disposent que d'une connexion Ethernet. |
Pour obtenir la liste complète des demandes d'autorisation impliquant une exigence de fonctionnalité matérielle, consultez la
uses-feature
. Si votre application demande l'une des fonctionnalités listées précédemment, incluez un
uses-feature
dans votre fichier manifeste pour la fonctionnalité matérielle implicite, qui indique qu'elle n'est pas
obligatoire. android:required="false"
Remarque:Si votre application cible Android 5.0 (niveau d'API 21) ou
supérieur et utilise le ACCESS_COARSE_LOCATION
ou
Autorisation ACCESS_FINE_LOCATION
, les utilisateurs peuvent toujours installer votre
application sur un téléviseur, même si celui-ci ne dispose pas d'une carte réseau ou d'un GPS
destinataire.
Après avoir rendu les fonctionnalités matérielles facultatives pour votre application, vous devez vérifier les la disponibilité de ces fonctionnalités au moment de l'exécution, puis ajustez le comportement de votre application. La section suivante explique comment vérifier les fonctionnalités matérielles et suggère quelques approches pour modifier le le comportement de votre application.
Pour en savoir plus sur le filtrage et la déclaration de fonctionnalités dans le fichier manifeste, consultez la
uses-feature
.
Rechercher les fonctionnalités matérielles
Le framework Android peut vous indiquer si les fonctionnalités matérielles ne sont pas disponibles sur l'appareil sur lequel
votre application est en cours d'exécution. Utiliser le hasSystemFeature(String)
pour rechercher des fonctionnalités spécifiques au moment de l'exécution. Cette méthode accepte un seul argument de chaîne
spécifie la caractéristique à vérifier.
L'exemple de code suivant montre comment détecter la disponibilité des fonctionnalités matérielles lors de l'exécution:
Kotlin
// Check whether the telephony hardware feature is available. if (packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) { Log.d("HardwareFeatureTest", "Device can make phone calls") } // Check whether android.hardware.touchscreen feature is available. if (packageManager.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)) { Log.d("HardwareFeatureTest", "Device has a touchscreen.") }
Java
// Check whether the telephony hardware feature is available. if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) { Log.d("HardwareFeatureTest", "Device can make phone calls"); } // Check whether android.hardware.touchscreen feature is available. if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)) { Log.d("HardwareFeatureTest", "Device has a touchscreen."); }
Écran tactile
La plupart des téléviseurs étant dépourvus d'écran tactile, Android ne prend pas en charge l'interaction avec l'écran tactile pour les téléviseurs ; De plus, l'utilisation d'un écran tactile n'est pas cohérente avec un environnement de visionnage où l'utilisateur est assis à 3 mètres de l'écran. Veillez à ce que vos éléments d'interface utilisateur et votre texte nécessitent ou impliquent l'utilisation d'un écran tactile.
Pour les téléviseurs, concevez votre application de sorte qu'elle la navigation à l'aide d'un pavé directionnel (Pavé directionnel) sur la télécommande d'un téléviseur. Pour en savoir plus sur la navigation à l'aide de commandes adaptées à la télévision, consultez Navigation TV :
Appareil photo
Bien qu'un téléviseur ne soit généralement pas équipé d'un appareil photo, vous pouvez tout de même fournir une image sur un téléviseur. Par exemple, si votre application prend, consulte et retouche des photos, vous pouvez désactiver la fonctionnalité de prise de vue sur les téléviseurs, tout en permettant aux utilisateurs de consulter et même de modifier photos. Si vous décidez d'activer l'application associée à votre appareil photo pour qu'elle fonctionne sur un téléviseur, ajoutez le paramètre la déclaration de fonctionnalité suivante pour le fichier manifeste de votre application:
<uses-feature android:name="android.hardware.camera" android:required="false" />
Si vous permettez à votre application de s'exécuter sans caméra, ajoutez du code à votre application qui détecte si la fonctionnalité de l'appareil photo est disponible et adapte le fonctionnement de votre l'application. L'exemple de code suivant montre comment détecter la présence d'une caméra:
Kotlin
// Check whether the camera hardware feature is available. if (packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA)) { Log.d("Camera test", "Camera available!") } else { Log.d("Camera test", "No camera available. View and edit features only.") }
Java
// Check whether the camera hardware feature is available. if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) { Log.d("Camera test", "Camera available!"); } else { Log.d("Camera test", "No camera available. View and edit features only."); }
GPS
Les téléviseurs sont fixes, ils sont des appareils intérieurs et n'ont pas de GPS intégré. récepteurs. Si votre application utilise des informations de localisation, vous pouvez toujours autoriser les utilisateurs à rechercher un emplacement ou utiliser un fournisseur de localisation statique (un code postal configuré sur le téléviseur, par exemple) ; configuration.
Kotlin
// Request a static location from the location manager. val locationManager = this.getSystemService(Context.LOCATION_SERVICE) as LocationManager val location: Location = locationManager.getLastKnownLocation("static") // Attempt to get postal code from the static location object. val geocoder = Geocoder(this) val address: Address? = try { geocoder.getFromLocation(location.latitude, location.longitude, 1)[0] .apply { Log.d(TAG, postalCode) } } catch (e: IOException) { Log.e(TAG, "Geocoder error", e) null }
Java
// Request a static location from the location manager. LocationManager locationManager = (LocationManager) this.getSystemService( Context.LOCATION_SERVICE); Location location = locationManager.getLastKnownLocation("static"); // Attempt to get postal code from the static location object. Geocoder geocoder = new Geocoder(this); Address address = null; try { address = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1).get(0); Log.d("Postal code", address.getPostalCode()); } catch (IOException e) { Log.e(TAG, "Geocoder error", e); }
Mettre la lecture en pause en mode Économie d'énergie
Certains téléviseurs sont compatibles avec un mode d'économie d'énergie lorsque l'utilisateur les éteint. Au lieu de s'éteindre, l'écran est désactivé et Android Télévision fonctionnant en arrière-plan. Dans ce mode, la sortie audio est toujours activée. arrêter la lecture du contenu en cours de lecture lorsque l'appareil est en mode économie d'énergie ;
Pour éviter la lecture en mode Économie d'énergie, vous devez ignorer
onStop()
et arrêter la lecture en cours:
Kotlin
override fun onStop() { // App-specific method to stop playback. stopPlayback() super.onStop() }
Java
@Override public void onStop() { // App-specific method to stop playback. stopPlayback(); super.onStop(); }
Lorsque l'utilisateur rétablit le courant, onStart()
est appelé.
si votre application est l'application active au premier plan. Pour en savoir plus sur le démarrage et l'arrêt
une activité, consultez
<ph type="x-smartling-placeholder"></ph>
Cycle de vie de l'activité