Telewizor znacznie różni się od innych urządzeń z Androidem. Telewizory nie niektóre funkcje sprzętowe dostępne w innych urządzeniach z Androidem, takie jak ekrany dotykowe, aparatami i odbiornikami GPS. Telewizory są też całkowicie zależne od dodatkowych urządzeń: aby użytkownicy mogli korzystać z aplikacji telewizyjnych, muszą używać pilota lub pada do gier. (Aby dowiedzieć się więcej na temat: różne metody wprowadzania znajdziesz w artykule Zarządzanie kontrolerami telewizora).
Tworząc aplikację na telewizor, uważnie weź pod uwagę ograniczenia sprzętowe i wymagania na sprzęcie telewizyjnym. Sprawdź, czy aplikacja działa na telewizorze i nie jest obsługiwany funkcje sprzętowe.
Sprawdź, czy telewizor jest dostępny
Jeśli tworzysz aplikację, która działa zarówno na telewizorze, jak i na innych urządzeniach,
sprawdzić, na jakim urządzeniu działa Twoja aplikacja, i dostosować jej działanie; Dla:
na przykład aplikację, którą można uruchomić za pomocą interfejsu Intent
,
sprawdź właściwości urządzenia, aby zdecydować, czy uruchomić
aktywność związana z telefonem lub aktywność związaną z telefonem.
Aby sprawdzić, czy aplikacja działa na telewizorze, najlepiej użyć metody PackageManager.hasSystemFeature()
czy urządzenie działa w trybie telewizora. Poniższy przykładowy kod pokazuje, jak sprawdzić, czy
aplikacja działa na telewizorze:
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"); }
Obsługa nieobsługiwanych funkcji sprzętowych
W zależności od projektu i funkcjonalności aplikacji można dostosować niedostępne funkcje sprzętowe. W tej sekcji omawiamy typowe funkcje sprzętowe, niedostępne na telewizorach, jak wykrywać brakujące funkcje sprzętowe i jakie alternatywne rozwiązania są zalecane tych funkcji.
Nieobsługiwane funkcje sprzętu telewizyjnego
Telewizory mają inne przeznaczenie niż inne urządzenia, więc nie mają funkcji sprzętowych, często są dostępne na innych urządzeniach z Androidem. Z tego powodu system Android nie obsługuje funkcji te funkcje dostępne na telewizorze:
Sprzęt | Deskryptor funkcji Androida |
---|---|
Ekran dotykowy | android.hardware.touchscreen |
Emulator ekranu dotykowego | android.hardware.faketouch |
Telefonia | android.hardware.telephony |
Aparat | android.hardware.camera |
Komunikacja Near Field Communications (NFC) | android.hardware.nfc |
GPS | android.hardware.location.gps |
mikrofon | android.hardware.microphone |
Czujniki | android.hardware.sensor |
Ekran w orientacji pionowej | android.hardware.screen.portrait |
Uwaga: niektóre kontrolery TV są wyposażone w mikrofon, nie jest taka sama jak opisana tutaj funkcja mikrofonu. Mikrofon kontrolera jest w pełni obsługiwane.
Zobacz Dokumentacja funkcji, gdzie znajdziesz pełną listę funkcji, podfunkcji i ich deskryptorów.
Deklarowanie wymagań sprzętowych dotyczących telewizora
Aplikacje na Androida mogą deklarować wymagania dotyczące funkcji sprzętowych w manifeście, aby zapewnić że nie są one instalowane na urządzeniach, które nie zapewniają tych funkcji. Jeśli przedłużasz istniejący adres do używania na telewizorze, dokładnie sprawdź plik manifestu pod kątem wymagań sprzętowych które mogą uniemożliwiać jej zainstalowanie na telewizorze.
Jeśli aplikacja używa funkcji sprzętowych, takich jak ekran dotykowy lub aparat, które są niedostępne na TV, ale może działać bez tych funkcji. Zmodyfikuj plik manifestu aplikacji, wskazuje, że te funkcje nie są wymagane. Ten fragment kodu manifestu pokazuje, jak zadeklarować, że aplikacja nie wymaga niedostępnych funkcji sprzętowych na telewizorach, ale są używane na urządzeniach innych niż telewizory:
<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"/>
Uwaga: niektóre funkcje zawierają podfunkcje, takie jak android.hardware.camera.front
,
zgodnie z opisem w
Dokumentacja funkcji Pamiętaj, by oznaczyć wszystkie podfunkcje również używane w Twojej aplikacji jako required="false"
.
Wszystkie aplikacje przeznaczone do użytku na telewizorach muszą zadeklarować, że funkcja ekranu dotykowego nie jest wymagana.
zgodnie z opisem w sekcji Pierwsze kroki z programem
Aplikacje TV. Jeśli aplikacja zazwyczaj korzysta z co najmniej jednej funkcji, która nie jest obsługiwana przez telewizor, zmień
Ustawienie atrybutu android:required
na false
dla tych funkcji w pliku manifestu.
Uwaga: deklaruj wymagane funkcje sprzętowe, ustawiając wartość
na true
uniemożliwia zainstalowanie aplikacji na telewizorze
urządzeń i wyświetla się w programie uruchamiającym na ekranie głównym Androida TV.
Pamiętaj o uprawnieniach, które sugerują funkcje sprzętowe
Niektóre uses-permission
deklaracje w pliku manifestu oznaczają funkcje sprzętowe. Oznacza to, że prośba o
uprawnienia w manifeście aplikacji mogą uniemożliwiać jej instalowanie i używanie na telewizorze.
urządzenia. Poniższe często wymagane uprawnienia tworzą niejawną funkcję sprzętową
wymaganie:
Uprawnienia | Domniemana funkcja sprzętowa |
---|---|
RECORD_AUDIO |
android.hardware.microphone |
CAMERA |
android.hardware.camera i android.hardware.camera.autofocus |
ACCESS_COARSE_LOCATION |
|
ACCESS_FINE_LOCATION |
|
ACCESS_WIFI_STATE CHANGE_WIFI_STATE
|
Niektóre telewizory mogą mieć tylko połączenie Ethernet. |
Pełną listę próśb o przyznanie uprawnień, które wymagają podania funkcji sprzętowych, znajdziesz w
uses-feature
Google. Jeśli aplikacja prosi o jedną z wymienionych wcześniej funkcji, dołącz atrybut
uses-feature
w pliku manifestu dla domniemanej funkcji sprzętowej, która stwierdza, że nie jest
android:required="false"
Uwaga: jeśli aplikacja jest kierowana na Androida 5.0 (poziom interfejsu API 21) lub
i używa ACCESS_COARSE_LOCATION
lub
ACCESS_FINE_LOCATION
, użytkownicy nadal mogą instalować
nawet jeśli telewizor nie ma karty sieciowej ani GPS-a,
odbiorcy.
Po ustawieniu w aplikacji funkcji sprzętowych jako opcjonalnych musisz sprawdzić dostępności tych funkcji w czasie działania, a następnie dostosować działanie aplikacji. Następna sekcja omawia sprawdzanie funkcji sprzętowych i sugeruje metody zmiany zachowanie aplikacji.
Więcej informacji o filtrowaniu i deklarowaniu funkcji w pliku manifestu znajdziesz w
uses-feature
Google.
Sprawdź funkcje sprzętowe
Platforma Androida może wskazać, czy funkcje sprzętowe urządzenia nie są dostępne,
jest uruchomiona. Użyj funkcji hasSystemFeature(String)
sprawdzania określonych funkcji w czasie działania. Ta metoda przyjmuje pojedynczy argument w postaci ciągu, który
określa obiekt, który chcesz sprawdzić.
Poniższy przykładowy kod pokazuje, jak wykryć dostępność funkcji sprzętowych w czasie działania:
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."); }
Ekran dotykowy
Większość telewizorów nie ma ekranów dotykowych, dlatego Android nie obsługuje Telewizory. Ponadto korzystanie z ekranu dotykowego jest niezgodne ze środowiskiem wyświetlania, w którym użytkownik siedzi w odległości 3,5 metra od ekranu. Upewnij się, że elementy interfejsu i tekst nie są wymagać ani sugerować użycia ekranu dotykowego.
W przypadku telewizorów zaprojektuj aplikację tak, aby obsługiwała nawigacji za pomocą pada kierunkowego (pada kierunkowego) na pilocie telewizora. Więcej informacji na temat: obsługi nawigacji za pomocą elementów sterujących odtwarzaniem na telewizorze, patrz Nawigacja na telewizorze
Aparat
Telewizor zazwyczaj nie ma aparatu, ale możesz przesłać zdjęcie na telewizorze. Jeśli na przykład masz aplikację, która robi, wyświetla i edytuje zdjęcia, możesz wyłączyć funkcję robienia zdjęć na telewizorach, a jednocześnie pozwolić użytkownikom na wyświetlanie, a nawet edycję zdjęcia. Jeśli chcesz, żeby aplikacja związana z aparatem działała na telewizorze, dodaj ta deklaracja funkcji pliku manifestu aplikacji:
<uses-feature android:name="android.hardware.camera" android:required="false" />
Jeśli zezwalasz swojej aplikacji na działanie bez kamery, dodaj do niej kod który wykrywa, czy funkcja kamery jest dostępna, i koryguje działanie . Ten przykładowy kod pokazuje, jak wykryć obecność kamery:
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
Telewizory to urządzenia nieruchome, przeznaczone do użytku wewnątrz pomieszczeń i nie mają wbudowanego globalnego systemu pozycjonowania (GPS). odbiorców. Jeśli Twoja aplikacja korzysta z informacji o lokalizacji, możesz zezwolić użytkownikom na wyszukiwanie lokalizację lub korzystanie z usług dostawcy lokalizacji statycznej, np. kodu pocztowego skonfigurowanego na telewizorze. konfiguracji.
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); }
Wstrzymaj odtwarzanie w trybie oszczędzania energii
Niektóre telewizory obsługują tryb oszczędzania energii, gdy użytkownik wyłączy urządzenie. Zamiast tylko się wyłączać, urządzenie wyłącza wyświetlacz, a Android pozostaje Telewizor uruchomiony w tle. W tym trybie wyjście audio jest nadal włączone, więc zatrzymywać wszystkie odtwarzane treści, gdy urządzenie działa w trybie oszczędzania energii.
Aby uniknąć odtwarzania w trybie oszczędzania energii, zastąp
onStop()
i zatrzymaj odtwarzanie treści:
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(); }
Gdy użytkownik ponownie włączy zasilanie, wywołana jest funkcja onStart()
jeśli Twoja aplikacja jest aktywną aplikacją na pierwszym planie. Więcej informacji o uruchamianiu i zatrzymywaniu
aktywność, zobacz
Cykl życia działania.