Android TV ana ekranı veya kısaca ana ekran, Önerilen içeriği kanallar ve programlar tablosu olarak gösterir. Her satır bir kanaldır. Bir kanalda, o kanalda bulunan tüm programlara ait kartlar bulunur:
Bu dokümanda, ana ekrana kanal ve programların nasıl ekleneceği, içeriğin nasıl güncelleneceği, kullanıcı işlemlerinin nasıl işleneceği ve kullanıcılarınıza en iyi deneyimin nasıl sağlanacağı gösterilmektedir. (API hakkında daha ayrıntılı bilgi edinmek isterseniz ana ekran codelab'i ve I/O 2017 Android TV oturumunu izleyin.)
Not: Öneri kanalları yalnızca Android 8.0 (API düzeyi 26) ve sonraki sürümler. Projeye katılanların sayısı Android 8.0 (API düzeyi 26) ve sonraki sürümlerde çalışan uygulamalar için öneriler. Alıcı: Android'in önceki sürümlerinde çalışan uygulamalar için öneriler, şunu kullanmalıdır: öneriler satırı .
Ana ekran kullanıcı arayüzü
Uygulamalar yeni kanallar oluşturabilir, bir kanaldaki programları ekleyebilir, kaldırabilir, güncelleyebilir ve bir kanaldaki programların sırasını kontrol edebilir. Örneğin, bir uygulama "Yenilikler" adlı bir kanal oluşturabilir ve yeni kullanıma sunulan programlara ait kartları gösterebilirsiniz.
Uygulamalar, kanalların ana ekranda görünme sırasını kontrol edemez. Uygulamanız yeni bir kanal oluşturduğunda bu kanal, ana ekranda kanal listesinin en altına eklenir. Kullanıcı kanalları yeniden sıralayabilir, gizleyebilir ve gösterebilir.
"Sıradakine Geç" kanalı
Sonra İzle kanalı, ana ekranda görünen ikinci satırdır. girin. Bu kanalı sistem oluşturur ve sürdürür. Uygulamanız şunları ekleyebilir: aktarmasına yardımcı olur. Daha fazla bilgi için bkz. Program ekleme "Sıradaki Video" kanalına göz atın.
Uygulama kanalları
Uygulamanızın oluşturduğu kanalların tümü şu yaşam döngüsünü izler:
- Kullanıcı, uygulamanızda bir kanal keşfeder ve bu kanalı ana ekrana eklemek ister.
- Uygulama, kanalı oluşturur ve
TvProvider
bölümüne ekler (bu noktada kanal görünür değildir). - Uygulama, sistemden kanalı göstermesini istiyor.
- Sistem, kullanıcıdan yeni kanalı onaylamasını ister.
- Yeni kanal, ana ekranın son satırında görünür.
Varsayılan kanal
Uygulamanız, kullanıcının ana ekrana ekleyebilmesi için istediği sayıda kanal sunabilir. Kullanıcı genellikle her bir kanalı ana ekranda görünmeden önce seçip onaylayın. Her uygulamanın bir varsayılan kanal oluşturma seçeneği vardır. Varsayılan kanal, otomatik olarak ana ekranda göründüğünden özeldir. kullanıcı bir web sitesine açıkça talep etmesi gerekir.
Ön koşullar
Android TV ana ekranı, uygulamanızın oluşturduğu kanalları ve programları yönetmek için Android'in TvProvider
API'lerini kullanır.
Sağlayıcının verilerine erişmek için uygulamanızın manifest dosyasına aşağıdaki izni ekleyin:
<uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" />
TvProvider
destek kitaplığı, sağlayıcının kullanımını kolaylaştırır. build.gradle
dosyanızdaki bağımlılıklara ekleyin:
Eski
implementation 'androidx.tvprovider:tvprovider:1.0.0'
Kotlin
implementation("androidx.tvprovider:tvprovider:1.0.0")
Kanallarla ve programlarla çalışmak için programınıza şu destek kitaplığı içe aktarmalarını eklediğinizden emin olun:
Kotlin
import android.support.media.tv.Channel import android.support.media.tv.TvContractCompat import android.support.media.tv.ChannelLogoUtils import android.support.media.tv.PreviewProgram import android.support.media.tv.WatchNextProgram
Java
import android.support.media.tv.Channel; import android.support.media.tv.TvContractCompat; import android.support.media.tv.ChannelLogoUtils; import android.support.media.tv.PreviewProgram; import android.support.media.tv.WatchNextProgram;
Kanallar
Uygulamanızın oluşturduğu ilk kanal, onun varsayılan kanalı olur. Varsayılan kanal otomatik olarak ana ekranda görünür. Oluşturduğunuz diğer tüm kanalların ana ekranda görünebilmesi için kullanıcı tarafından seçilmesi ve kabul edilmesi gerekir.
Kanal oluşturma
Uygulamanız, yalnızca ön planda çalışırken sistemden yeni eklenen kanalları göstermesini istemelidir. Bu, kullanıcı farklı bir uygulama çalıştırırken uygulamanızın, kanalınızı eklemek için onay isteyen bir iletişim kutusu görüntülemesini önler. Arka planda çalışırken bir kanal eklemeye çalışırsanız etkinliğin onActivityResult()
yöntemi RESULT_CANCELED
durum kodunu döndürür.
Kanal oluşturmak için şu adımları izleyin:
Kanal oluşturucu oluşturup özelliklerini belirleyin. Lütfen kanal türü
TYPE_PREVIEW
olmalıdır. Daha fazla ekle özelliklerini gerektiği şekilde ayarlayın.Kotlin
val builder = Channel.Builder() // Every channel you create must have the type
TYPE_PREVIEW
builder.setType(TvContractCompat.Channels.TYPE_PREVIEW) .setDisplayName("Channel Name") .setAppLinkIntentUri(uri)Java
Channel.Builder builder = new Channel.Builder(); // Every channel you create must have the type
TYPE_PREVIEW
builder.setType(TvContractCompat.Channels.TYPE_PREVIEW) .setDisplayName("Channel Name") .setAppLinkIntentUri(uri);Kanalı sağlayıcıya ekleyin:
Kotlin
var channelUri = context.contentResolver.insert( TvContractCompat.Channels.CONTENT_URI, builder.build().toContentValues())
Java
Uri channelUri = context.getContentResolver().insert( TvContractCompat.Channels.CONTENT_URI, builder.build().toContentValues());
-
Kanala program eklemek için kanal kimliğini kaydetmeniz gerekir daha sonra. Döndürülen URI'den kanal kimliğini çıkarın:
Kotlin
var channelId = ContentUris.parseId(channelUri)
Java
long channelId = ContentUris.parseId(channelUri);
Kanalınıza bir logo eklemeniz gerekir.
Uri
veyaBitmap
kullanın. Logo simge 80 dp x 80 dp olmalı ve opak olmalıdır. Gösterilen dairesel maske:Kotlin
// Choose one or the other storeChannelLogo(context: Context, channelId: Long, logoUri: Uri) // also works if logoUri is a URL storeChannelLogo(context: Context, channelId: Long, logo: Bitmap)
Java
// Choose one or the other storeChannelLogo(Context context, long channelId, Uri logoUri); // also works if logoUri is a URL storeChannelLogo(Context context, long channelId, Bitmap logo);
Varsayılan kanalı oluşturma (isteğe bağlı): Uygulamanız ilk kanalı oluşturduğunuzda Bu sayede, onu en iyi varsayılan kanal ile ana sayfada görünmesini sağlar ve ekrana sığmaz. Oluşturduğunuz diğer tüm kanallar kullanıcılar açıkça görünene kadar seçer.
Kotlin
TvContractCompat.requestChannelBrowsable(context, channelId)
Java
TvContractCompat.requestChannelBrowsable(context, channelId);
- Varsayılan kanalınızın, uygulamanız açılmadan önce görünmesini sağlayın. Şunları yapabilirsiniz:
şunu dinleyen bir
BroadcastReceiver
ekleyerek bu davranışı gerçekleştirebilirsiniz: Ana ekranda,android.media.tv.action.INITIALIZE_PROGRAMS
işlemi uygulama yüklendikten sonra gönderir: Geliştirme sırasında uygulamanızı başka cihazdan yüklerken bu adımı Adb aracılığıyla niyeti tetiklemek your.package.name/.YourReceiverName, uygulamanızın<receiver android:name=".RunOnInstallReceiver" android:exported="true"> <intent-filter> <action android:name="android.media.tv.action.INITIALIZE_PROGRAMS" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver>
BroadcastReceiver
:adb shell am broadcast -a android.media.tv.action.INITIALIZE_PROGRAMS -n \ your.package.name/.YourReceiverName
Nadiren de olsa uygulamanız, yayını kullanıcının bulunduğu saatte alabilir. uygulamanızı başlatır. Kodunuzun varsayılan kanalı eklemeye çalışmadığından emin olun birçok kez yer alıyor.
Bir kanalı güncelleme
Kanalları güncellemek, kanalları oluşturmaya çok benzer.
Değiştirilmesi gereken özellikleri ayarlamak için başka bir Channel.Builder
kullanın.
Kanalı güncellemek için ContentResolver
simgesini kullanın. Kanal ilk olarak eklendiğinde kaydettiğiniz kanal kimliğini kullanın:
Kotlin
context.contentResolver.update( TvContractCompat.buildChannelUri(channelId), builder.build().toContentValues(), null, null )
Java
context.getContentResolver().update(TvContractCompat.buildChannelUri(channelId), builder.build().toContentValues(), null, null);
Bir kanalın logosunu güncellemek için storeChannelLogo()
kullanın.
Kanal silme
Kotlin
context.contentResolver.delete(TvContractCompat.buildChannelUri(channelId), null, null)
Java
context.getContentResolver().delete(TvContractCompat.buildChannelUri(channelId), null, null);
Programlar
Uygulama kanalına program ekleme
Bir PreviewProgram.Builder
oluşturun ve özelliklerini ayarlayın:
Kotlin
val builder = PreviewProgram.Builder() builder.setChannelId(channelId) .setType(TvContractCompat.PreviewPrograms.TYPE_CLIP) .setTitle("Title") .setDescription("Program description") .setPosterArtUri(uri) .setIntentUri(uri) .setInternalProviderId(appProgramId)
Java
PreviewProgram.Builder builder = new PreviewProgram.Builder(); builder.setChannelId(channelId) .setType(TvContractCompat.PreviewPrograms.TYPE_CLIP) .setTitle("Title") .setDescription("Program description") .setPosterArtUri(uri) .setIntentUri(uri) .setInternalProviderId(appProgramId);
Programın türüne bağlı olarak daha fazla özellik ekleyin. (Özellikleri görmek için bilgi için aşağıdaki tablolara bakın.)
Programı sağlayıcıya ekleyin:
Kotlin
var programUri = context.contentResolver.insert(TvContractCompat.PreviewPrograms.CONTENT_URI, builder.build().toContentValues())
Java
Uri programUri = context.getContentResolver().insert(TvContractCompat.PreviewPrograms.CONTENT_URI, builder.build().toContentValues());
Daha sonra başvurmak üzere program kimliğini alın:
Kotlin
val programId = ContentUris.parseId(programUri)
Java
long programId = ContentUris.parseId(programUri);
Sonrakini İzle kanalına program ekleme
Sonra İzle kanalına program eklemek için bkz. İzle'ye program ekleme Sonraki kanal.
Programı güncelleme
Programların bilgilerini değiştirebilirsiniz. Örneğin, bir filmin kiralama fiyatını veya kullanıcının bir programın ne kadarını izlediğini gösteren ilerleme çubuğunu güncellemek isteyebilirsiniz.
Değiştirmeniz gereken özellikleri ayarlamak için bir PreviewProgram.Builder
kullanın.
ve ardından programı güncellemek için getContentResolver().update
numaralı telefonu arayın. Program ilk eklendiğinde kaydettiğiniz program kimliğini belirtin:
Kotlin
context.contentResolver.update( TvContractCompat.buildPreviewProgramUri(programId), builder.build().toContentValues(), null, null )
Java
context.getContentResolver().update(TvContractCompat.buildPreviewProgramUri(programId), builder.build().toContentValues(), null, null);
Program silme
Kotlin
context.contentResolver .delete(TvContractCompat.buildPreviewProgramUri(programId), null, null)
Java
context.getContentResolver().delete(TvContractCompat.buildPreviewProgramUri(programId), null, null);
Kullanıcı işlemlerini işleme
Uygulamanız, kanalları görüntülemek ve eklemek için kullanıcı arayüzü sağlayarak kullanıcıların içerikleri keşfetmelerine yardımcı olabilir. Uygulamanız, ana ekranda görünen kanallarınızla etkileşimleri de işlemelidir.
Kanalları keşfetme ve ekleme
Uygulamanız, kullanıcının kanallarını seçmesine ve eklemesine olanak tanıyan bir kullanıcı arayüzü öğesi (örneğin, kanalı eklemenizi isteyen bir düğme) sağlayabilir.
Kullanıcı belirli bir kanal için istekte bulunduktan sonra, kullanıcının kanalı ana ekranın kullanıcı arayüzüne ekleme iznini almak için şu kodu yürütün:
Kotlin
val intent = Intent(TvContractCompat.ACTION_REQUEST_CHANNEL_BROWSABLE) intent.putExtra(TvContractCompat.EXTRA_CHANNEL_ID, channelId) try { activity.startActivityForResult(intent, 0) } catch (e: ActivityNotFoundException) { // handle error }
Java
Intent intent = new Intent(TvContractCompat.ACTION_REQUEST_CHANNEL_BROWSABLE); intent.putExtra(TvContractCompat.EXTRA_CHANNEL_ID, channelId); try { activity.startActivityForResult(intent, 0); } catch (ActivityNotFoundException e) { // handle error }
Sistemde, kullanıcıdan kanalı onaylamasının istendiği bir iletişim kutusu görüntülenir.
İsteğin sonucunu etkinliğinizin onActivityResult
yönteminde (Activity.RESULT_CANCELED
veya Activity.RESULT_OK
) işleyin.
Android TV ana ekran etkinlikleri
Kullanıcı, uygulama tarafından yayınlanan programlarla/kanallarla etkileşimde bulunduğunda ana ekran, amaçları uygulamaya gönderir:
- Kullanıcı kanalın logosunu seçtiğinde, ana ekran, kanalın APP_LINK_INTENT_URI özelliğinde depolanan
Uri
değerini uygulamaya gönderir. Uygulamanın ana kullanıcı arayüzünü veya seçili kanalla ilgili bir görünümü başlatması yeterlidir. - Kullanıcı bir program seçtiğinde ana ekran, bir programın INTENT_URI özelliğinde depolanan
Uri
bilgisini uygulamaya gönderir. Uygulama, seçili içeriği oynatmalıdır. - Kullanıcı, artık bir programla ilgilenmediğini belirtebilir ve programın ana ekranın kullanıcı arayüzünden kaldırılmasını isteyebilir. Sistem, programı kullanıcı arayüzünden kaldırır ve programın sahibi olan uygulamaya program kimliğini içeren bir niyet (android.media.tv.ACTION_PREVIEW_PROGRAM_BROWSABLE_DISABLED veya android.media.tv.ACTION_Watch_NEXT_PROGRAM_BROWSABLE_DISABLED) gönderir. Uygulama, programı sağlayıcıdan kaldırmalı ve yeniden EKLEMEMELİDİR.
Ana ekranın kullanıcı etkileşimleri için gönderdiği tüm Uris
için intent filtreleri oluşturduğunuzdan emin olun; örneğin:
<receiver
android:name=".WatchNextProgramRemoved"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.media.tv.ACTION_WATCH_NEXT_PROGRAM_BROWSABLE_DISABLED" />
</intent-filter>
</receiver>
En iyi uygulamalar
- Birçok TV uygulaması, kullanıcıların giriş yapmasını gerektirir. Bu durumda
BroadcastReceiver
android.media.tv.action.INITIALIZE_PROGRAMS
için dinleyen önerileri kimliği doğrulanmamış kullanıcılar için kanal içeriği.Örneğin, uygulamanız başlangıçta en iyi içeriği veya o anda popüler olan içeriği gösterir. Kullanıcı giriş yaptıktan sonra kişiselleştirilmiş içerikler gösterebilir. Bu, uygulamaların satışa daha fazla satış yapması için kullanıcıları kontrol eder. - Uygulamanız ön planda değilken bir kanalı veya bir
çalışmayı planlamak için
JobScheduler
uygulamasını kullanın (bkz: İş Planlayıcı ve BusinessService). - Uygulamanızın işleyişinde sorun olursa sistem, sağlayıcı izinlerini iptal edebilir (örneğin: sağlayıcıya sürekli olarak veri spam'i göndermek). Şunları yaptığınızdan emin olun: sağlayıcıya erişen kodu, kullanımı için "dene yakalama" ifadeleriyle sarmalama güvenlik istisnaları.
Programları ve kanalları güncellemeden önce, daha önce öğrendiğiniz verileri ve mutabakat sağlamanız gerekiyor. Örneğin, dönüşüm izleme aracını kaldırılmasını istediğiniz bir program seçin. Şu özelliklere sahip bir arka plan işi kullanın: Mevcut sunucu için sorgu yaptıktan sonra verilerinizi sağlayıcıya ekler/günceller. ve kanallarınız için onay isteme seçeneğine sahip olursunuz. Bu işi şu durumlarda çalıştırabilirsiniz: Uygulama başlatılır ve uygulamanın verilerini güncellemesi gerektiğinde.
Kotlin
context.contentResolver .query( TvContractCompat.buildChannelUri(channelId), null, null, null, null).use({ cursor-> if (cursor != null and cursor.moveToNext()) { val channel = Channel.fromCursor(cursor) if (channel.isBrowsable()) { //update channel's programs } } })
Java
try (Cursor cursor = context.getContentResolver() .query( TvContractCompat.buildChannelUri(channelId), null, null, null, null)) { if (cursor != null && cursor.moveToNext()) { Channel channel = Channel.fromCursor(cursor); if (channel.isBrowsable()) { //update channel's programs } } }
Tüm resimlerde (logolar, simgeler, içerik resimleri) benzersiz Uris kullanın. Bir resmi güncellerken farklı bir Uri kullandığınızdan emin olun. Tüm görseller önbelleğe alınır. Resmi değiştirirken URI'yı değiştirmezseniz, eski resim görünmeye devam eder.
WHERE yan tümcelerine izin verilmediğini ve WHERE yan tümceleriyle sağlayıcılara yapılan çağrıların bir güvenlik istisnası oluşturacağını unutmayın.
Özellikler
Bu bölümde, kanal ve program özellikleri ayrı ayrı açıklanmaktadır.
Kanal özellikleri
Her kanal için şu özellikleri belirtmeniz gerekir:
Özellik | Notlar |
---|---|
TÜR | TYPE_PREVIEW olarak ayarlandı. |
DISPLAY_NAME | kanalın adına ayarlanır. |
UYGULAMA_LINK_INTENT_URI | Kullanıcı kanalın logosunu seçtiğinde, sistem kanalla alakalı içerik sunan bir etkinlik başlatma niyeti gönderir. Bu özelliği, söz konusu etkinliğin intent filtresinde kullanılan URI olarak ayarlayın. |
Ayrıca, bir kanalın dahili uygulama kullanımı için ayrılmış altı alanı da vardır. Bu alanlar, uygulamanın kanalı dahili veri yapısıyla eşleştirmesine yardımcı olabilecek anahtarları veya diğer değerleri depolamak için kullanılabilir:
- DAHİLİ_SAĞLAYICI_KİMLİĞİ
- DAHİLİ_SAĞLAYICI_VERİLERİ
- DAHİLİ_SAĞLAYICI_FLAG1
- DAHİLİ_SAĞLAYICI_FLAG2
- DAHİLİ_SAĞLAYICI_FLAG3
- DAHİLİ_SAĞLAYICI_FLAG4
Program özellikleri
Her program türünün özellikleri için tek tek sayfalara bakın:
- Video Programı Özellikleri
- Ses Programı Özellikleri
- Oyun Programı Özellikleri
- Sonraki Programın Özellikleri
Örnek Kod
Ana ekranla etkileşim kuran uygulamalar oluşturma ve Android TV ana ekranına kanal ve program ekleme hakkında daha fazla bilgi edinmek için ana ekran codelab sayfamıza bakın.