L'hardware della TV � sostanzialmente diverso dagli altri dispositivi Android. Le TV non includono alcune delle funzionalit� hardware presenti su altri dispositivi Android, come i touchscreen, fotocamere e ricevitori GPS. Le TV dipendono completamente anche da dispositivi hardware secondari: per interagire con le app TV, gli utenti devono utilizzare un telecomando o un gamepad. (Per saperne di pi� vari metodi di immissione, vedi Gestire i controller della TV.
Quando crei un'app per la TV, considera con attenzione le limitazioni e i requisiti hardware su hardware TV. Controlla se la tua app � in esecuzione su una TV e gestisci i dispositivi non supportati funzionalit� hardware.
Verifica la presenza di un dispositivo TV
Se stai creando un'app che funziona sia su dispositivi TV che su altri dispositivi, potresti dover
controlla il tipo di dispositivo su cui � in esecuzione la tua app e regolane il funzionamento. Per
Ad esempio, se hai un'app che pu� essere avviata tramite un Intent
,
Controllare le propriet� del dispositivo per stabilire se iniziare una
un'attivit� fisica o un'attivit� dello smartphone.
Il metodo consigliato per determinare se la tua app � in esecuzione su un dispositivo TV � usare il metodo PackageManager.hasSystemFeature()
per controllare
se il dispositivo � in modalit� televisione. Il seguente codice di esempio mostra come verificare se
la tua app � in esecuzione su un dispositivo TV:
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"); }
Gestire le funzionalit� hardware non supportate
A seconda della progettazione e della funzionalit� dell'app, potresti riuscire ad aggirare alcuni funzionalit� hardware non disponibili. Questa sezione illustra le caratteristiche tipiche dell'hardware non disponibile per la TV, come rilevare funzionalit� hardware mancanti e quali alternative vengono suggerite queste funzionalit�.
Funzionalit� hardware TV non supportate
Le TV hanno uno scopo diverso dagli altri dispositivi, quindi non dispongono di funzionalit� hardware che spesso hanno altri dispositivi Android. Per questo motivo, il sistema Android non supporta le seguenti funzionalit� per un dispositivo TV:
Hardware | Descrittore delle funzionalit� Android |
---|---|
Touchscreen | android.hardware.touchscreen |
Emulatore touchscreen | android.hardware.faketouch |
Telefonia | android.hardware.telephony |
Fotocamera | android.hardware.camera |
Near Field Communication (NFC) | android.hardware.nfc |
GPS | android.hardware.location.gps |
Microfono | android.hardware.microphone |
Sensori | android.hardware.sensor |
Schermo con orientamento verticale | android.hardware.screen.portrait |
Nota:alcuni controller TV sono dotati di un microfono, non corrisponde alla funzionalit� hardware del microfono descritta qui. Il microfono del controller � completamente supportati.
Consulta Riferimento alle funzionalit� per un elenco completo di funzionalit�, funzionalit� secondarie e descrittori.
Dichiarare i requisiti hardware per la TV
Le app per Android possono dichiarare i requisiti relativi alle funzionalit� hardware nel file manifest dell'app per garantire che non sono installati su dispositivi che non le forniscono. Se intendi estendere un modello esistente per l'uso sulla TV, esamina attentamente il file manifest dell'app per verificare la presenza di eventuali requisiti hardware dichiarazioni che potrebbero impedirne l'installazione su un dispositivo TV.
Se la tua app usa funzionalit� hardware non disponibili sul touchscreen o una fotocamera TV, ma pu� funzionare senza utilizzare queste funzionalit�, modificare il file manifest dell'app in indicano che queste funzionalit� non sono obbligatorie. Il seguente snippet di codice manifest dimostra come dichiarare che la tua app non richiede funzionalit� hardware non disponibili sui dispositivi TV, ma utilizza queste funzionalit� su dispositivi diversi dalla TV:
<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"/>
Nota:alcune funzionalit� includono funzionalit� secondarie, ad esempio android.hardware.camera.front
,
come descritto in
Informazioni sulle funzionalit�. Assicurati di contrassegnare tutte le funzionalit� secondarie utilizzate anche nella tua app come required="false"
.
Tutte le app destinate all'uso sui dispositivi TV devono dichiarare che la funzionalit� touchscreen non � necessaria.
come descritto nella Guida introduttiva all'utilizzo di
App TV. Se normalmente la tua app utilizza una o pi� funzionalit� non supportate dai dispositivi TV, modifica
Impostazione dell'attributo android:required
su false
per queste funzionalit� nel file manifest.
Attenzione:dichiara una funzionalit� hardware come richiesto impostandone
pari a true
impedisce l'installazione dell'app sulla TV
dispositivi o che appaiono nell'Avvio app della schermata Home di Android TV.
Presta attenzione alle autorizzazioni che implicano funzionalit� hardware
Alcune uses-permission
le dichiarazioni del file manifest implicano le funzionalit� hardware. Questo comportamento significa che la richiesta
le autorizzazioni nel file manifest dell'app possono impedire l'installazione e l'utilizzo della tua app sulla TV
dispositivi mobili. Le seguenti autorizzazioni richieste comunemente creano una funzionalit� hardware implicita
requisito:
Autorizzazione | Funzionalit� hardware implicita |
---|---|
RECORD_AUDIO |
android.hardware.microphone |
CAMERA |
android.hardware.camera e android.hardware.camera.autofocus |
ACCESS_COARSE_LOCATION |
|
ACCESS_FINE_LOCATION |
|
ACCESS_WIFI_STATE CHANGE_WIFI_STATE
|
Alcuni dispositivi TV dispongono solo di una connessione Ethernet. |
Per un elenco completo delle richieste di autorizzazione che implicano un requisito per le funzionalit� hardware, consulta le
uses-feature
guida. Se la tua app richiede una delle funzionalit� elencate in precedenza, includi una
uses-feature
una dichiarazione nel file manifest per la funzionalit� hardware implicita che indica che non si
obbligatorio. android:required="false"
.
Nota:se la tua app ha come target Android 5.0 (livello API 21) oppure
e utilizza ACCESS_COARSE_LOCATION
o
ACCESS_FINE_LOCATION
, gli utenti possono comunque installare
su un dispositivo TV, anche se il dispositivo TV non dispone di una scheda di rete o di un GPS
destinatario.
Dopo aver reso facoltative le funzionalit� hardware per la tua app, devi controllare la disponibilit� di queste funzionalit� in fase di runtime, quindi modifica il comportamento dell'app. La sezione successiva illustra come verificare le funzionalit� hardware e suggerisce alcuni approcci per cambiare comportamento dell'app.
Per ulteriori informazioni su come filtrare e dichiarare le caratteristiche nel file manifest, consulta
uses-feature
guida.
Verificare le funzionalit� hardware
Il framework Android � in grado di indicare se le funzionalit� hardware non sono disponibili sul dispositivo su cui
la tua app � in esecuzione. Usa hasSystemFeature(String)
per controllare funzionalit� specifiche in fase di runtime. Questo metodo prende un singolo argomento stringa
specifica la caratteristica che vuoi controllare.
Il seguente esempio di codice mostra come rilevare la disponibilit� delle funzionalit� hardware in fase di esecuzione:
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."); }
Touchscreen
Poich� la maggior parte delle TV non dispone di touchscreen, Android non supporta l'interazione con il touchscreen per Dispositivi TV. Inoltre, l'uso di un touchscreen non � coerente con un ambiente di visualizzazione in cui l'utente � seduto a 3 metri di distanza dal display. Assicurati che gli elementi dell'interfaccia utente e il testo non richiedono o implicano l'uso di un touchscreen.
Per i dispositivi TV, progetta la tua app in modo che supporti la navigazione usando un pad direzionale (D-pad) sul telecomando di una TV. Per ulteriori informazioni supportare correttamente la navigazione con controlli compatibili con la TV; consulta Navigazione TV.
Fotocamera
Anche se una TV in genere non dispone di una videocamera, puoi comunque fornire una foto su una TV. Ad esempio, se hai un'app che richiede, visualizza e modifica foto, puoi disattivare la funzionalit� di scatto delle foto per la TV e consentire agli utenti di visualizzare e persino modificare foto. Se decidi di consentire il funzionamento dell'app relativa alla fotocamera su una TV, aggiungi l' seguente dichiarazione relativa alla funzionalit� nel file manifest dell'app:
<uses-feature android:name="android.hardware.camera" android:required="false" />
Se consenti l'esecuzione dell'app senza videocamera, aggiungi il codice all'app che rileva se la funzione della videocamera � disponibile e regola il funzionamento del dell'app. Il seguente esempio di codice mostra come rilevare la presenza di una videocamera:
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
Le TV sono dispositivi fissi all'interno e non dispongono di un sistema di posizionamento globale (GPS) integrato o ricevitori. Se la tua app utilizza informazioni sulla posizione, puoi comunque consentire agli utenti di cercare una posizione o utilizzare un fornitore di servizi di localizzazione statico come un codice postale configurato durante il dispositivo TV configurazione.
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); }
Mettere in pausa la riproduzione in modalit� a basso consumo
Alcuni dispositivi TV supportano la modalit� a basso consumo quando l'utente spegne il dispositivo. Anzich� arrestarsi, il dispositivo disattiva il display e mantiene Android TV in esecuzione in background. L'uscita audio � ancora attiva in questa modalit�, quindi interrompere i contenuti attualmente in riproduzione quando il dispositivo � in modalit� a basso consumo.
Per evitare la riproduzione in modalit� a basso consumo, sostituisci
onStop()
e interrompi i contenuti in riproduzione:
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(); }
Quando l'utente riattacca la corrente, viene chiamato onStart()
se la tua app � l'app attiva in primo piano. Per ulteriori informazioni su come avviare e interrompere
un'attivit�, vedi
Il ciclo di vita dell'attivit�.