TV donanımını işleme

TV donanımı diğer Android cihazlardan önemli ölçüde farklıdır. TV'ler diğer Android cihazlarda bulunan dokunmatik ekran, kameralar ve GPS alıcıları. Ayrıca TV'ler de tamamen ikincil donanım cihazlarına bağlıdır: Kullanıcıların TV uygulamalarıyla etkileşimde bulunabilmeleri için uzaktan kumanda veya oyun kumandası kullanmaları gerekir. (Daha fazla bilgi için çeşitli giriş yöntemleri için TV kumandalarını yönetme bölümüne bakın.)

TV için uygulama geliştirirken, uygulamanın donanım sınırlamalarını ve gereksinimlerini TV donanımında çalıştırmayı deneyin. Uygulamanızın bir TV'de çalışıp çalışmadığını ve desteklenmeyen herkese açık kullanıcı adı olup olmadığını kontrol etme donanım özelliklerini kullanıyor.

TV cihazı olup olmadığını kontrol edin

Hem TV cihazlarında hem de diğer cihazlarda çalışan bir uygulama oluşturuyorsanız Uygulamanızın ne tür bir cihazda çalıştığını kontrol edebilir ve çalışmasını düzenleyebilir. Örneğin, Örneğin, Intent üzerinden başlatılabilen bir uygulamanız varsa, TV odaklı bir cihazın başlatılıp başlatılmayacağını belirlemek için cihaz özelliklerini kontrol edin telefon etkinliğiyle yüklü olabilir.

Uygulamanızın bir TV cihazında çalışıp çalışmadığını belirlemenin önerilen yolu, PackageManager.hasSystemFeature() yöntemini kullanarak cihazın televizyon modunda çalışıp çalışmadığı. Aşağıdaki örnek kod, Uygulamanız bir TV cihazında çalışıyor:

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");
}

Desteklenmeyen donanım özelliklerini ele alma

Uygulamanızın tasarımına ve işlevine bağlı olarak, belirli bir sorunu çözmek için donanım özelliklerinin kullanılamamasına yol açabilir. Bu bölümde, genellikle hangi donanım özelliklerinin TV'de kullanılamıyor, eksik donanım özelliklerinin nasıl algılanacağı ve özellikler.

Desteklenmeyen TV donanımı özellikleri

TV'lerin amacı diğer cihazlardan farklı olduğundan, TV'lerde diğer Android destekli cihazlarda genellikle vardır. Bu nedenle Android sistemi TV cihazı için aşağıdaki özellikler:

Donanım Android özellik açıklayıcısı
Dokunmatik ekran android.hardware.touchscreen
Dokunmatik ekran emülatörü android.hardware.faketouch
Telefon Hizmeti android.hardware.telephony
Kamera android.hardware.camera
Near Field Communication (NFC) android.hardware.nfc
GPS android.hardware.location.gps
Mikrofon android.hardware.microphone
Sensörler android.hardware.sensor
Ekran dikey yönde android.hardware.screen.portrait

Not: Bazı TV kumandalarının burada açıklanan mikrofon donanımı özelliğiyle aynı değildir. Kumanda mikrofonu tamamen dolu desteklenir.

Bkz. Özelliklerin, alt özelliklerin ve tanımlayıcılarının tam listesi için özellikler referansını inceleyin.

TV için donanım gereksinimlerini beyan etme

Android uygulamaları, aşağıdakilerin sağlanmasına yardımcı olmak için uygulama manifest'inde donanım özelliği gereksinimlerini beyan edebilir: bu özellikleri sağlamayan cihazlara yüklenmediğinden emin olun. Mevcut bir TV'de kullanım için uygulamanız varsa donanım gereksinimleri için uygulamanızın manifest dosyasını yakından inceleyin yüklenmesini önleyebilecek beyanlar bulmanızı sağlar.

Uygulamanızda, dokunmatik ekran veya kamera gibi bulunmayan donanım özellikleri kullanılıyorsa TV'yi kullanıyor ancak bu özellikler kullanılmadan da çalışabiliyorsa uygulamanızın manifestini bu özelliklerin gerekli olmadığını belirtir. Aşağıdaki manifest kodu snippet'i uygulamanızın, kullanılamayan donanım özelliklerini gerektirmediğini nasıl beyan edeceğinizi gösterir. ancak TV dışındaki cihazlarda şu özellikleri kullanır:

<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"/>

Not: Bazı özelliklerin alt özellikleri vardır. Örneğin: android.hardware.camera.front, Özellik referansı. Uygulamanızda kullanılan tüm alt özellikleri de required="false" olarak işaretlediğinizden emin olun.

TV cihazlarında kullanılması tasarlanan tüm uygulamalar, dokunmatik ekran özelliğinin zorunlu olmadığını beyan etmelidir. TV uygulamaları. Uygulamanız normalde TV cihazlarının desteklemediği özelliklerden birini veya daha fazlasını kullanıyorsa Manifest dosyanızdaki bu özellikler için android:required özellik ayarını false olarak belirleyin.

Dikkat: Bir donanım özelliğini ayarlayarak true değeri, uygulamanızın TV'ye yüklenmesini engeller cihazlarda veya Android TV ana ekran başlatıcıda görünen

Donanım özelliklerini ima eden izinlere dikkat edin

Bazı uses-permission manifesto beyanlarını yalnızca donanım özellikleri olarak tanımlar. Bu davranış, sizden bazı uygulama manifestinizdeki izinler, uygulamanızın TV'de yüklenmesini ve kullanılmasını engelleyebilir cihazlar. Aşağıdaki yaygın olarak istenen izinler, örtülü bir donanım özelliği oluşturur Şart:

İzin Dolaylı donanım özelliği
RECORD_AUDIO android.hardware.microphone
CAMERA android.hardware.camera ve
android.hardware.camera.autofocus
ACCESS_COARSE_LOCATION

android.hardware.location

android.hardware.location.network (hedef API düzeyi 20 veya daha düşük) )

ACCESS_FINE_LOCATION

android.hardware.location

android.hardware.location.gps (hedef API düzeyi 20 veya daha düşük) )

ACCESS_WIFI_STATE
CHANGE_WIFI_STATE

android.hardware.wifi

Bazı TV cihazlarında yalnızca ethernet bağlantısı vardır.

Donanım özelliği gereksinimi olduğunu belirten izin isteklerinin tam listesi için şu sayfaya göz atın: uses-feature rehberini inceleyin. Uygulamanız daha önce listelenen özelliklerden birini istiyorsa uses-feature manifest dosyanızdaki beyanda, gereklidir. android:required="false".

Not: Uygulamanız Android 5.0 (API düzeyi 21) veya daha yüksek ve ACCESS_COARSE_LOCATION ya da ACCESS_FINE_LOCATION izniniz varsa kullanıcılar TV cihazındaki ağ kartı veya GPS olmasa bile, TV cihazındaki uygulama alıcı.

Uygulamanız için donanım özelliklerini isteğe bağlı hale getirdikten sonra, sonra da uygulamanızın davranışını düzenleyebilir. Sonraki bölüm , donanım özelliklerinin nasıl kontrol edileceğini tartışır ve en iyi uygulamaları paylaşacağız.

Manifest'teki filtreleme ve özellikleri bildirme hakkında daha fazla bilgi için uses-feature rehberini inceleyin.

Donanım özelliklerini kontrol edin

Android çerçevesi, cihazda donanım özelliklerinin kullanılamadığı durumlarda nasıl çalıştığını gösterir. hasSystemFeature(String) kullanın yöntemini kontrol etmek için kullanılır. Bu yöntem, kontrol etmek istediğiniz özelliği belirtir.

Aşağıdaki kod örneğinde, donanım özelliklerinin kullanılabilirliğinin nasıl algılanacağı gösterilmektedir çalışma zamanında:

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.");
}

Dokunmatik ekran

Çoğu TV'de dokunmatik ekran bulunmadığından Android, TV cihazları. Ayrıca, dokunmatik ekran kullanmak, "ekranda görünme" veya kullanıcı ekrandan 3 metre uzakta oturuyor. Kullanıcı arayüzü öğelerinizin ve metninizin Dokunmatik ekran kullanımını gerektiren veya ima eden içerikler.

TV cihazlarında uygulamanızı, YouTube TV'yi destekleyen TV uzaktan kumandasındaki yön tuşlarını (D-pad) kullanarak gezinme. Daha fazla bilgi için TV'ye uygun kontrolleri kullanarak navigasyonu düzgün şekilde desteklemesine yardımcı olma TV'de gezinme.

Kamera

Televizyonda normalde kamerası olmasa da fotoğrafçılıkla ilgili TV'de görebilirsiniz. Örneğin, fotoğraf çeken, görüntüleyen ve düzenleyen bir uygulamanız varsa TV'lerde resim çekme işlevini devre dışı bırakıp kullanıcıların görüntülemesine, hatta düzenlemesine fotoğraf. Kamerayla ilgili uygulamanızın TV'de çalışmasına karar verirseniz uygulama manifestinizdeki şu özellik beyanını ekleyin:

<uses-feature android:name="android.hardware.camera" android:required="false" />

Uygulamanızı kamera olmadan çalışacak şekilde etkinleştirirseniz uygulamanıza kod ekleyin kamera özelliğinin kullanılabilir olup olmadığını tespit eden ve kameranızın çalışmasında düzenlemeler yapan uygulamasını indirin. Aşağıdaki kod örneğinde, kamera olup olmadığının nasıl algılanacağı gösterilmektedir:

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

TV'ler sabit, iç mekandaki cihazlardır ve yerleşik küresel konumlandırma sistemine (GPS) sahip değildir. alıcı'lar. Uygulamanız konum bilgilerini kullanıyorsa, kullanıcıların TV cihazı sırasında yapılandırılmış bir konum veya posta kodu gibi statik bir konum sağlayıcı kullanma kurulumu.

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);
}

Düşük güç modunda oynatmayı duraklat

Bazı TV cihazları, kullanıcı cihazı kapattığında düşük güç modunu destekler. Cihaz kapanmak yerine ekranı devre dışı bırakır ve Android'i kullanmaya devam eder. Arka planda çalışan TV. Ses çıkışı bu modda hâlâ etkindir. Dolayısıyla, cihaz düşük güç modundayken oynatılan tüm içerikleri durdurur.

Düşük güç modunda çalmayı önlemek için onStop(). ve şu anda oynatılan içeriği durdurun:

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();
}

Kullanıcı gücü tekrar açtığında onStart() çağrılır. Ön plan uygulamanız olup olmadığını kontrol edin. Başlatma ve durdurma hakkında daha fazla bilgi için bir etkinlik varsa Etkinlik yaşam döngüsü.