Gérer le matériel TV

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

android.hardware.location

android.hardware.location.network (niveau d'API cible 20 ou inférieur) uniquement)

ACCESS_FINE_LOCATION

android.hardware.location

android.hardware.location.gps (niveau d'API cible 20 ou inférieur) uniquement)

ACCESS_WIFI_STATE
CHANGE_WIFI_STATE

android.hardware.wifi

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é