Umgang mit TV-Hardware

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

android.hardware.location

android.hardware.location.network (Ziel-API-Level 20 oder niedriger) )

ACCESS_FINE_LOCATION

android.hardware.location

android.hardware.location.gps (Ziel-API-Level 20 oder niedriger) )

ACCESS_WIFI_STATE
CHANGE_WIFI_STATE

android.hardware.wifi

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.