Die TV-Hardware unterscheidet sich erheblich von der anderer Android-Geräte. Fernseher können nicht Hardwarefunktionen anderer Android-Geräte wie Touchscreens, Kameras und GPS-Empfänger. Fernseher sind auch vollständig von sekundären Hardwaregeräten abhängig: Damit Nutzer mit TV-Apps interagieren können, müssen sie eine Fernbedienung oder ein Gamepad verwenden. (Um mehr über verschiedene Eingabemethoden, siehe TV-Controller verwalten.
Berücksichtigen Sie bei der Entwicklung einer TV-App genau die Hardwareeinschränkungen und -anforderungen die mit TV-Hardware arbeiten. Prüfe, ob deine App auf einem Fernseher ausgeführt wird, und bewältige nicht unterstützte Inhalte Hardwarefunktionen.
Fernseher suchen
Wenn Sie eine App entwickeln, die sowohl auf Fernsehern als auch auf anderen Geräten funktioniert, müssen Sie möglicherweise
Prüfen Sie, auf welcher Art von Gerät Ihre App läuft, und passen Sie die Funktionsweise Ihrer App an. Für
Wenn Sie eine Anwendung haben, die über ein Intent
gestartet werden kann,
überprüfen Sie die Geräteeigenschaften, um zu entscheiden, ob Sie eine fernsehorientierte
einer Smartphone-Aktivität.
Wenn du herausfinden möchtest, ob deine App auf einem Fernseher ausgeführt wird, solltest du die PackageManager.hasSystemFeature()
-Methode verwenden.
Gibt an, ob das Gerät im TV-Modus läuft. Der folgende Beispielcode zeigt, wie Sie prüfen,
Ihre App auf einem Fernseher ausgeführt wird:
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"); }
Umgang mit nicht unterstützten Hardwarefunktionen
Je nach Design und Funktionalität Ihrer App können Sie möglicherweise Hardwarefunktionen nicht verfügbar sind. In diesem Abschnitt wird erläutert, welche Hardwarefunktionen nicht für Fernseher verfügbar sind, wie man fehlende Hardwarefunktionen erkennt und welche Alternativen vorgeschlagen werden, diese Funktionen.
Nicht unterstützte TV-Hardwarefunktionen
Fernseher erfüllen einen anderen Zweck als andere Geräte und haben daher keine Hardwarefunktionen, die andere Android-Geräte dies häufig tun. Aus diesem Grund unterstützt das Android-System die folgenden Funktionen auf einem Fernseher:
Hardware | Android-Funktionsdeskriptor |
---|---|
Touchscreen | android.hardware.touchscreen |
Touchscreen-Emulator | android.hardware.faketouch |
Telefonie | android.hardware.telephony |
Kamera | android.hardware.camera |
Nahfeldkommunikation (NFC) | android.hardware.nfc |
GPS | android.hardware.location.gps |
Mikrofon | android.hardware.microphone |
Sensoren | android.hardware.sensor |
Bildschirm im Hochformat | android.hardware.screen.portrait |
Hinweis:Einige TV-Controller haben ein Mikrofon. und sie sind nicht mit der hier beschriebenen Mikrofon-Hardwarefunktion identisch. Das Mikrofon des Controllers ist voll unterstützt.
Siehe Funktionsreferenz für eine vollständige Liste der Funktionen, Subfeatures und ihrer Beschreibungen.
Hardwareanforderungen für Fernseher angeben
Für Android-Apps können im App-Manifest Anforderungen an Hardwarefunktionen deklariert werden, um sicherzustellen, dass sie nicht auf Geräten installiert sind, die diese Funktionen nicht bieten. Wenn Sie eine bestehende App für die Verwendung auf Fernsehern verwenden möchten, prüfen Sie das Manifest Ihrer App auf Hardwareanforderungen Erklärungen, die möglicherweise verhindern, dass es auf einem Fernseher installiert wird.
Wenn Ihre App Hardwarefunktionen wie einen Touchscreen oder eine Kamera verwendet, die auf aber ohne diese Funktionen funktionieren, ändern Sie das Manifest Ihrer App so, dass diese Funktionen nicht erforderlich sind. Das folgende Manifest-Code-Snippet zeigt, wie deklariert wird, dass für Ihre App keine Hardwarefunktionen erforderlich sind, die nicht verfügbar sind auf Fernsehern, nutzt diese Funktionen jedoch auf Nicht-Fernsehern:
<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"/>
Hinweis:Einige Funktionen haben Unterfunktionen wie android.hardware.camera.front
,
wie in den
Funktionsreferenz Achten Sie darauf, alle Subfeatures, die auch in Ihrer App verwendet werden, als required="false"
zu markieren.
Bei allen Apps, die für die Verwendung auf Fernsehern bestimmt sind, muss darauf hingewiesen werden, dass die Touchscreen-Funktion nicht erforderlich ist,
wie unter Erste Schritte mit
TV-Apps. Wenn deine App normalerweise eine oder mehrere Funktionen nutzt, die von TV-Geräten nicht unterstützt werden, ändere die
Einstellung des Attributs android:required
für diese Funktionen in deinem Manifest auf false
.
Achtung:Wenn Sie eine Hardwarefunktion als erforderlich deklarieren,
auf true
gesetzt ist, kann deine App nicht auf dem Fernseher installiert werden
Geräte oder in der Übersicht des Android TV-Startbildschirms erscheinen.
Achten Sie auf Berechtigungen, die Hardwarefunktionen implizieren
Einige uses-permission
Manifestdeklarationen nur Hardwarefunktionen. Dieses Verhalten bedeutet, dass die Anforderung einiger
Berechtigungen in deinem App-Manifest können verhindern, dass deine App auf Fernsehern installiert und verwendet werden kann
Geräte. Die folgenden häufig angeforderten Berechtigungen erstellen ein implizites Hardwarefeature
Anforderung:
Berechtigung | Implizite Hardwarefunktion |
---|---|
RECORD_AUDIO |
android.hardware.microphone |
CAMERA |
android.hardware.camera und android.hardware.camera.autofocus |
ACCESS_COARSE_LOCATION |
|
ACCESS_FINE_LOCATION |
|
ACCESS_WIFI_STATE CHANGE_WIFI_STATE
|
Einige Fernsehgeräte haben nur eine Ethernet-Verbindung. |
Eine vollständige Liste der Berechtigungsanfragen, für die eine Hardwarefunktion erforderlich ist, findest du in den
uses-feature
. Wenn deine App eine der zuvor aufgeführten Funktionen anfordert, füge einen
uses-feature
in deinem Manifest für die implizite Hardwarefunktion angeben, die angibt,
erforderlich. android:required="false"
.
Hinweis:Wenn Ihre App auf Android 5.0 (API-Level 21) oder
und verwendet ACCESS_COARSE_LOCATION
oder
ACCESS_FINE_LOCATION
haben, können Nutzer deine
App auf einem Fernsehgerät, auch wenn das Fernsehgerät keine Netzwerkkarte oder GPS hat
Empfänger.
Nachdem Sie die Hardwarefunktionen für Ihre App optional gemacht haben, müssen Sie prüfen, ob die Verfügbarkeit dieser Funktionen während der Laufzeit und passen Sie dann das Verhalten Ihrer App an. Der nächste Abschnitt beschreibt, wie Hardwarefunktionen überprüft werden können, und schlägt einige Ansätze zum Ändern der Ihrer App zu erkennen.
Weitere Informationen zum Filtern und Deklarieren von Funktionen im Manifest findest du in der
uses-feature
.
Auf Hardwarefunktionen prüfen
Das Android-Framework informiert Sie, wenn auf dem Gerät, auf dem das Gerät installiert ist, keine Hardwarefunktionen verfügbar sind.
Ihre App ausgeführt wird. hasSystemFeature(String)
verwenden
-Methode zur Überprüfung bestimmter Features zur Laufzeit. Diese Methode verwendet ein einzelnes Zeichenfolgenargument, das
gibt die Funktion an, die Sie prüfen möchten.
Das folgende Codebeispiel zeigt, wie die Verfügbarkeit von Hardwarefunktionen erkannt wird zur Laufzeit:
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
Da die meisten Fernseher keine Touchscreens haben, unterstützt Android für diese Geräte Fernsehern. Darüber hinaus ist die Verwendung eines Touchscreens nicht konsistent mit einer Ansichtsumgebung, in der Der Nutzer sitzt 3 Meter vom Display entfernt. Achten Sie darauf, dass sich UI-Elemente und Text einen Touchscreen erfordern oder implizieren.
Entwickle deine App für TV-Geräte so, dass sie mit der Richtungstasten (Steuerkreuz) auf der Fernbedienung eines Fernsehers navigieren können. Weitere Informationen zu die Navigation mithilfe von Steuerelementen für den Fernseher unterstützen, siehe TV-Navigation.
Kamera
Fernseher haben normalerweise keine Kamera. Sie können aber eine fotografische App auf einem Fernseher. Wenn Sie beispielsweise eine App haben, mit der Fotos aufgenommen, angesehen und bearbeitet werden, können Sie die Bildaufnahmefunktion für Fernseher deaktivieren und Nutzern die Möglichkeit bieten, Fotos. Wenn Sie die Kamera-App auf einem Fernseher aktivieren möchten, fügen Sie die folgende Funktionsdeklaration in Ihr App-Manifest ein:
<uses-feature android:name="android.hardware.camera" android:required="false" />
Wenn Ihre App ohne Kamera ausgeführt werden kann, fügen Sie der App Code hinzu die erkennt, ob die Kamerafunktion verfügbar ist, und Anpassungen an der Das folgende Codebeispiel zeigt, wie das Vorhandensein einer Kamera erkannt wird:
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
Fernseher sind stationäre Geräte für den Innenbereich und haben kein integriertes globales Positionierungssystem (GPS). Empfänger. Wenn Ihre App Standortinformationen verwendet, können Nutzer trotzdem nach Einen Standort oder einen statischen Standortanbieter, z. B. eine Postleitzahl, die während des TV-Geräts konfiguriert wurde einrichten.
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); }
Wiedergabe im Energiesparmodus pausieren
Einige Fernseher unterstützen einen Energiesparmodus, wenn der Nutzer das Gerät ausschaltet. Anstatt das Gerät herunterzufahren, wird das Display deaktiviert und Android Fernseher läuft im Hintergrund. Die Audioausgabe ist auch in diesem Modus aktiviert. Beendet alle aktuell wiedergegebenen Inhalte, wenn sich das Gerät im Energiesparmodus befindet.
Wenn Sie die Wiedergabe im Energiesparmodus vermeiden möchten, überschreiben Sie
onStop()
und beenden Sie alle aktuell wiedergegebenen Inhalte:
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(); }
Wenn der Nutzer den Strom wieder einschaltet, wird onStart()
aufgerufen
Ihre App ist die aktive App im Vordergrund. Weitere Informationen zum Starten und Beenden
einer Aktivität, siehe
<ph type="x-smartling-placeholder"></ph>
Aktivitätslebenszyklus.