Radyo kontrolü uygulaması, medya ve sesli asistan uygulamalarının radyoyu kontrol etmesini sağlayan MediaSession
ve MediaBrowse
'e dayanır. Daha fazla bilgi için developer.android.com adresindeki Araclara yönelik medya uygulamaları oluşturma başlıklı makaleyi inceleyin.
packages/apps/Car/libs
içindeki car-broadcastradio-support kitaplığında bir medya tarama ağacı uygulaması sağlanır. Bu kitaplık, URI'ye ve URI'den dönüştürmek için ProgramSelector uzantılarını da içerir. Radyo uygulamalarının, ilişkili göz atma ağacını oluşturmak için bu kitaplığı kullanması önerilir.
Medya kaynağı değiştirici
Radyo ile medyada görüntülenen diğer uygulamalar arasında sorunsuz bir geçiş sağlamak için car-media-common kitaplığı, radyo uygulamasına entegre edilmesi gereken sınıflar içerir. MediaAppSelectorWidget
, radyo uygulamasının XML'ine dahil edilebilir (referans medya ve radyo uygulamalarında kullanılan simge ve açılır liste):
<com.android.car.media.common.MediaAppSelectorWidget android:id="@+id/app_switch_container" android:layout_width="@dimen/app_switch_widget_width" android:layout_height="wrap_content" android:background="@drawable/app_item_background" android:gravity="center" />
Bu widget, geçiş yapılabilir medya kaynaklarının listesini gösteren AppSelectionFragment
'ü açar. Sağlanandan farklı bir kullanıcı arayüzü istiyorsanız değiştiricinin gösterilmesi gerektiğinde AppSelectionFragment
'ü başlatmak için özel bir widget oluşturabilirsiniz.
AppSelectionFragment newFragment = AppSelectionFragment.create(widget, packageName, fullScreen); newFragment.show(mActivity.getSupportFragmentManager(), null);
packages/apps/Car/Radio
adresindeki referans radyo uygulaması uygulamasında örnek bir uygulama sağlanmıştır.
Ayrıntılı kontrol özellikleri
MediaSession
(MediaSession.Callback
üzerinden) arayüzü, şu anda çalan radyo programı için kontrol mekanizmaları sağlar:
onPlay
,onStop
. Radyo oynatma sesini kapatma/açma.onPause
. Zaman kaydırmalı duraklatma (destekleniyorsa).onPlayFromMediaId
. Üst düzey bir klasördeki herhangi bir içeriği oynatın. Örneğin, "FM'yi çal" veya "Radyoyu çal" diyebilirsiniz.onPlayFromUri
. Belirli bir frekansı çal. Örneğin, "88.5 FM'yi çal".onSkipToNext
,onSkipToPrevious
. Sonraki veya önceki bir kanala geçmeonSetRating
. Favorilere öğe ekleyin veya Favoriler'den öğe kaldırın.
MediaBrowser, üç tür üst düzey dizin üzerinde ayarlanabilir bir MediaItem gösterir:
- (İsteğe bağlı) Programlar (radyo kanalları). Bu mod genellikle kullanıcının konumunda bulunan tüm ayarlanabilir radyo istasyonlarını belirtmek için çift tunerli radyolar tarafından kullanılır.
- Favoriler Favoriler listesine eklenen radyo programlarından bazıları kullanılamayabilir (alış kapsamı dışında).
- Bant kanalları. Mevcut bölgede fiziksel olarak mümkün olan tüm kanallar (87,9, 88,1, 88,3, 88,5, 88,7, 88,9, 89,1 vb.). Her kanalın ayrı bir üst düzey dizini vardır.
Bu klasörlerin her birindeki her öğe (AM/FM/Programlar), ayarlamak için MediaSession ile kullanılabilecek bir URI içeren bir MediaItem öğesidir. Her üst düzey klasör (AM/FM/Programlar), oynatmayı tetiklemek için MediaSession ile kullanılabilen bir mediaId içeren bir MediaItem'dir ve OEM'nin takdirine bağlıdır. Örneğin, "FM'yi çal", "AM'yi çal" ve "Radyo'yu çal", OEM radyo uygulamasına göndermek için bir mediaId kullanan, radyoya özgü olmayan sorgulardır. Genel istek ve mediaId'den neyin çalınacağını belirlemek radyo uygulamasına bağlıdır.
MediaSession
Yayın akışını duraklatma kavramı olmadığından Oynat, Duraklat ve Durdur işlemleri her zaman radyo için geçerli değildir. Radyoda, Durdur işlemi yayının sesini kapatmakla, Oynat ise sesini açmakla ilişkilidir.
Bazı radyo alıcıları (veya uygulamaları), içeriği önbelleğe alıp daha sonra oynatarak yayın akışını duraklatmayı simüle etme olanağı sunar. Bu gibi durumlarda onPause
simgesini kullanın.
mediaId ve URI işlemlerinden oynatma, MediaBrowser arayüzünden alınan bir istasyonu açmak için kullanılır. mediaId, belirli bir istasyonu tanımlamak için radyo uygulaması tarafından sağlanan, belirli bir istasyonu tanımlamak için kullanılacak benzersiz (belirli bir kimlik yalnızca bir öğeyi işaret ettiğinden) ve kararlı (belirli bir öğe tüm oturum boyunca aynı kimliğe sahip olduğundan) bir değerdir. URI, iyi tanımlanmış bir şemaya sahip olmalıdır. Kısacası, ProgramSelector'ın URI'ye dönüştürülmüş biçimidir. Bu, benzersizlik özelliğini korur ancak istasyon farklı bir frekansa geçtiğinde değişebileceğinden sabit olması gerekmez.
onPlayFromSearch
, tasarım gereği kullanılmaz. MediaBrowser ağacından bir arama sonucunu seçmek istemcinin (yardımcı uygulama) sorumluluğundadır. Bu sorumluluğu radyo uygulamasına taşımak karmaşıklığı artıracak, dize sorgularının nasıl görüneceğiyle ilgili resmi sözleşmeler gerektirecek ve farklı donanım platformlarında eşit olmayan bir kullanıcı deneyimine neden olacaktır.
Not: Radyo uygulaması, MediaBrowser arayüzü üzerinden istemciye gösterilmeyen bir istasyon adını aramak için yararlı olabilecek ek bilgiler içermez.
Sonraki veya önceki istasyona atlama işlemi, mevcut bağlama bağlıdır:
- Bir uygulama, Favoriler listesindeki bir istasyona ayarlandığında, Favoriler listesinden sonraki istasyona geçebilir.
- Program listesinden bir istasyonu dinlerken kanal numarasına göre sıralanan sonraki kullanılabilir istasyona geçebilirsiniz.
- İsteğe bağlı bir kanalı dinlerken yayın sinyali olmasa bile sonraki fiziksel kanala geçilebilir.
Bu işlemler radyo uygulaması tarafından yönetilir.
Hata işleme
TransportControls
işlemleri (Oynat, Durdur ve Sonraki) işlemin başarılı olup olmadığına dair geri bildirim sağlamaz. Hatayı belirtmenin tek yolu, MediaSession durumunu bir hata mesajıyla STATE_ERROR
değerine ayarlamaktır.
Radyo uygulaması bu işlemleri işleyip yürütmeli veya bir hata durumu ayarlamalıdır.
Oynat komutu hemen uygulanmıyorsa oynatma durumu, komut yürütülürken
STATE_CONNECTING
(doğrudan ayarlama durumunda) veya
STATE_SKIPPING_TO_PREVIOUS
ya da
NEXT
olarak değiştirilmelidir.
Müşteri,
PlaybackState
değerini izlemelidir ve oturumun mevcut programı istenen programa değiştirdiğini veya hata durumuna girdiğini doğrulamalıdır. STATE_CONNECTING
30 saniyeyi aşmamalıdır. Ancak belirli bir AM/FM frekansına doğrudan ayarlama yapmak çok daha hızlı performans sağlar.
Favori ekleme ve kaldırma
MediaSession, favorileri kontrol etmek için kullanılabilen derecelendirme desteğine sahiptir. onSetRating
rating türü ile çağrıldığında
RATING_HEART
o anda dinlenen istasyonu Favoriler listesine ekler veya listeden kaldırır.
Eski hazır ayarların aksine bu modelde, her kayıtlı favori bir sayısal alana (genellikle 1 ila 6) atandığında, sırasız ve sınırsız bir Favoriler listesi varsayılır.
Sonuç olarak, hazır ayar tabanlı sistemler onSetRating
işlemiyle uyumlu olmaz.
MediaSession API'nin sınırlaması, yalnızca şu anda ayarlanmış olan istasyonun eklenebilmesi veya kaldırılabilmesidir. Örneğin, öğeler kaldırılmadan önce seçilmelidir. Bu, yalnızca MediaBrowser istemcisinin (ör. tamamlayıcı uygulama) bir sınırlamasıdır. Radyo uygulaması benzer şekilde kısıtlanmamıştır. Bir uygulama Favoriler'i desteklemiyorsa bu bölüm isteğe bağlıdır.
MediaBrowser
Belirli bir bölgede hangi frekansların veya fiziksel kanal adlarının (belirli bir radyo teknolojisi için rastgele bir kanala ayarlama uygun olduğunda) geçerli olduğunu belirtmek için her bant için tüm geçerli kanallar (frekanslar) listelenir. ABD bölgesinde bu, 87,8 ila 108,0 MHz aralığında 101 FM kanalı (0,2 MHz aralığı kullanılarak) ve 530 ila 1.700 kHz aralığında 117 AM kanalı (10 kHz aralığı kullanılarak) anlamına gelir. HD radyo aynı kanal alanını kullandığından ayrı olarak sunulmaz.
Şu anda mevcut radyo programlarının listesi düzdür. Bu, doğrudan ses yayınına (DAB) göre gruplandırma gibi görüntüleme şemalarına izin vermez.
Favoriler listesindeki girişler ayarlanamaz. Örneğin, belirli bir program aralığın dışındaysa. Radyo uygulaması, girişin önceden ayarlanıp ayarlanamayacağını algılayabilir veya algılayamayabilir. Bu durumda, giriş oynatılabilir olarak işaretlenmeyebilir.
Üst düzey klasörleri belirlemek için Bluetooth tarafından kullanılan mekanizma uygulanır.
Yani
MediaDescription
nesnesinin Ekstralar paketi, tıpkı Bluetooth'un
EXTRA_BT_FOLDER_TYPE
için yaptığı gibi tuner'a özel bir alan içerir.
Yayın radyosu söz konusu olduğunda bu, herkese açık API'de aşağıdaki yeni alanların tanımlanmasına yol açar:
EXTRA_BCRADIO_FOLDER_TYPE = "android.media.extra.EXTRA_BCRADIO_FOLDER_TYPE"
. Aşağıdaki değerlerden biri:BCRADIO_FOLDER_TYPE_PROGRAMS = 1
. Şu anda kullanılabilen programlar.BCRADIO_FOLDER_TYPE_FAVORITES = 2
. Favoriler.BCRADIO_FOLDER_TYPE_BAND = 3
. Belirli bir banttaki tüm fiziksel kanallar.
Alakalı tüm veriler mevcut
MediaBrowser.MediaItem
şemasına uyduğundan radyoya özgü özel meta veri alanları tanımlamanız gerekmez:- Program adı (RDS PS, DAB hizmet adı).
MediaDescription.getTitle
. - FM frekansı. URI (ProgramSelector bölümüne bakın) veya
MediaDescription.getTitle
(BROADCASTRADIO_FOLDER_TYPE_BAND
klasöründe giriş varsa). - Radyoya özgü tanımlayıcılar (RDS PI, DAB SId).
MediaDescription.getMediaUri
ProgramSelector olarak ayrıştırılır.
Genellikle, mevcut program veya Favoriler listesindeki bir giriş için FM frekansını getirmeye gerek yoktur (istemci medya kimlikleriyle çalışacağından). Ancak böyle bir ihtiyaç ortaya çıkarsa (ör. görüntüleme amacıyla) URI'de bulunur ve
ProgramSelector
olarak ayrıştırılabilir. Bununla birlikte, URI'nin mevcut oturumdaki öğeleri seçmek için kullanılması önerilmez. Ayrıntılı bilgi içinProgramSelector
başlıklı makaleyi inceleyin.Performans veya ciltleyiciyle ilgili sorunları önlemek için MediaBrowser hizmeti sayfalandırmayı desteklemelidir:
EXTRA_PAGE
EXTRA_PAGE_SIZE
subscribe()
için ek parametreler
Not: Sayfalandırma, varsayılan olarak seçenekler işlenmeden
onLoadChildren()
varyantında uygulanır.Tüm liste türlerindeki ilgili girişlerin (ham kanallar, bulunan programlar ve favoriler) farklı mediaId'leri olabilir (radyo uygulamasına bağlıdır; destek kitaplığında farklı olur). URI'ler (ProgramSelector biçiminde), çoğu durumda bulunan ham kanallar ve programlar arasında farklılık gösterir (RDS'siz FM hariç), ancak bulunan programlar ile favoriler arasında çoğunlukla aynıdır (ör. AF güncellendiğinde hariç).
Farklı liste türlerinden gelen girişler için farklı mediaId'lerin olması, bu girişler üzerinde farklı işlemler yapılmasını sağlar. Yakın zamanda seçilen
MediaItem
klasörüne bağlı olarakonSkipToNext
'te Favoriler listesinde veya Tüm Programlar listesinde gezinebilirsiniz (MediaSession bölümüne bakın).Özel ayar işlemleri
Program listesi, kullanıcıların belirli bir istasyonu açmasına olanak tanır ancak "FM'ye geç" gibi genel istekler göndermelerine izin vermez. Bu istekler, FM bandında son dinlenen bir istasyonun açılmasına neden olabilir.
Bu tür işlemleri desteklemek için bazı üst düzey dizinlerde
FLAG_PLAYABLE
işareti (klasörler içinFLAG_BROWSABLE
ile birlikte) ayarlanmıştır.İşlem Ayarlanacağı kanal Nasıl yayınlanır? Radyo çal Herhangi bir radyo kanalı startService(ACTION_PLAY_BROADCASTRADIO)
VEYA,
playFromMediaId(MediaBrowser.getRoot())
Radyoyu aç Herhangi bir FM kanalı FM bandının mediaId
bölümünden oynatmaHangi programa geçileceğini belirleme işlemi uygulamaya bağlıdır. Bu genellikle, verilen listedeki en son kanala geçmektir.
ACTION_PLAY_BROADCASTRADIO
hakkında ayrıntılı bilgi için Genel oynama intent'leri başlıklı makaleyi inceleyin.Keşif ve hizmet bağlantısı
PackageManager
, yayın radyosu ağacını yayınlayan MediaBrowserService'i doğrudan bulabilir. Bunun içinACTION_PLAY_BROADCASTRADIO
intent'iyle (Genel oynatma intent'leri bölümüne bakın) veMATCH_SYSTEM_ONLY
işaretiyleresolveService
işlevini çağırın. Radyo yayını yapan tüm hizmetleri bulmak için (birden fazla olabilir; örneğin, ayrı AM/FM ve uydu)queryIntentServices
seçeneğini kullanın.Çözümlenen hizmet,
android.media.browse.MediaBrowserService
bağlama niyetini de işler. Bu durum GTS ile doğrulanır.Seçilen MediaBrowserService'e bağlanmak için belirli bir hizmet bileşeni ve
connect
içinMediaBrowser
örneği oluşturun. Bağlantı kurulduktan sonragetSessionToken
aracılığıyla MediaSession için bir tutamak elde edilebilir.Radyo uygulaması, hizmetlerinin bir
onGetRoot
uygulamasında bağlanmasına izin verilen istemci paketlerini kısıtlayabilir. Uygulama, sistem uygulamalarının beyaz listeye eklenmeden bağlanmasına izin vermelidir. Beyaz listeye ekleme hakkında ayrıntılı bilgi için Asistan uygulama paketini ve imzasını kabul etme başlıklı makaleyi inceleyin.Kaynağa özel uygulama (ör. radyo uygulaması) bu tür kaynak desteği olmayan bir cihaza yüklenirse
ACTION_PLAY_BROADCASTRADIO
intent'ini işlediği şeklinde reklamını yapmaya devam eder ancak MediaBrowser ağacı radyoya özgü etiketler içermez. Bu nedenle, belirli bir kaynağın bir cihazda kullanılıp kullanılamadığını kontrol etmek isteyen istemcilerin:- Radyo hizmetini keşfedin (
ACTION_PLAY_BROADCASTRADIO
içinresolveService
numaralı telefonu arayın). MediaBrowser
oluşturup ardından bu hesaba bağlanın.MediaItem
'ünEXTRA_BCRADIO_FOLDER_TYPE
ile birlikte olup olmadığını belirleyin.
Not: Çoğu durumda, istemcinin belirli bir cihaz için mevcut tüm kaynakları algılamak amacıyla mevcut tüm MediaBrowser ağaçlarını taraması gerekir.
Bant adları
Bant listesi, klasör türü etiketi
BCRADIO_FOLDER_TYPE_BAND
olarak ayarlanmış bir dizi üst düzey dizinle temsil edilir.MediaItem
'ların başlıkları, grup adlarını temsil eden yerelleştirilmiş dizelerdir. Çoğu durumda bu, İngilizce çeviriyle aynı olacaktır ancak müşteri bu varsayıma güvenemez.Belirli bantları aramak için kararlı bir mekanizma sağlamak amacıyla bant klasörleri için
EXTRA_BCRADIO_BAND_NAME_EN
adlı ek bir etiket eklenir. Bu, grubun yerelleştirilmemiş adıdır ve yalnızca aşağıdaki önceden tanımlanmış değerlerden birini alabilir:AM
FM
DAB
Grup bu listede yoksa grup adı etiketi ayarlanmamalıdır. Ancak bant listedeyse etiketi ayarlanmış olmalıdır. HD radyo, AM/FM ile aynı temel aracı kullandığından ayrı bantları listelemez.
Genel oynama amaçları
Belirli bir kaynağı (ör. radyo veya CD) oynatmaya özel her uygulama, bazı içerikleri oynatmaya başlamak için genel bir oyna intent'ini işlemelidir. Bu işlem, muhtemelen etkin olmayan durumdan (ör. önyükleme işleminden sonra) başlatılabilir. Oynatılabilecek içeriğin nasıl seçileceği uygulamaya bağlıdır ancak genellikle en son oynatılan radyo programı veya CD parçası seçilir.Her ses kaynağı için ayrı bir intent tanımlanır:
android.car.intent.action.PLAY_BROADCASTRADIO
android.car.intent.action.PLAY_AUDIOCD
: CD-DA veya CD-Textandroid.car.intent.action.PLAY_DATADISC
: CD/DVD gibi optik veri diski ancak CD-DA değil (Karma Mod CD'si olabilir)android.car.intent.action.PLAY_AUX
: Hangi AUX bağlantı noktasını belirtmedenandroid.car.intent.action.PLAY_BLUETOOTH
android.car.intent.action.PLAY_USB
: Hangi USB cihazınandroid.car.intent.action.PLAY_LOCAL
: Yerel medya depolama alanı (yerleşik flash)
Intent'ler, genel oynatma komutu için kullanılmak üzere seçildi. Bunun nedeni, aynı anda iki sorunu çözmeleridir: genel oynatma komutunun kendisi ve hizmet bulma. Bu tür bir intent'e sahip olmanın ek avantajı, MediaBrowser oturumu açmadan bu tür basit işlemleri gerçekleştirme olanağıdır.
Aslında bu intent'lerle çözülen en önemli sorun hizmet keşfidir. Bu şekilde hizmet keşfi işlemi kolay ve nettir (Keşif ve hizmet bağlantısı bölümüne bakın).
Bazı istemci uygulamalarını kolaylaştırmak için bu tür bir Play komutunu verme işleminin alternatif bir yolu vardır (radyo uygulaması tarafından da uygulanması gerekir): Kök düğümün rootId değeriyle (mediaId olarak kullanılır)
playFromMediaId
verme. Kök düğüm oynatılmaya uygun olmasa da rootId, mediaId olarak kullanılabilecek rastgele bir dizedir. Ancak müşterilerin bu nüansı anlaması gerekmez.ProgramSelector
mediaId
,MediaBrowserService
'den bir kanal seçmek için yeterli olsa da bir oturuma bağlı olur ve sağlayıcılar arasında tutarlı değildir. Bazı durumlarda istemcinin oturumlar ve cihazlar arasında bunu korumak için mutlak bir işaretçiye (ör. mutlak sıklık) ihtiyacı olabilir.Dijital radyo yayınları çağında, belirli bir istasyonu dinlemek için yalnızca frekans bilgisi yeterli değildir. Bu nedenle, analog veya dijital bir kanala sintonize olmak için
ProgramSelector
simgesini kullanın.ProgramSelector
iki bölümden oluşur:- Birincil tanımlayıcı. Belirli bir radyo istasyonu için değişmeyen ancak istasyonu ayarlamak için yeterli olmayabilecek benzersiz ve sabit bir tanımlayıcı. Örneğin, ABD'de çağrı işareti olarak çevrilebilecek RDS PI kodu.
- İkincil tanımlayıcılar. İlgili istasyona ayarlama yapmak için yararlı olan ek tanımlayıcılar (ör. frekans). Diğer radyo teknolojilerinden gelen tanımlayıcılar da dahil olabilir. Örneğin, bir DAB istasyonunun analog yayın yedeği olabilir.
ProgramSelector
'ünMediaBrowser
veyaMediaSession
tabanlı çözüme sığmasını sağlamak için serileştirmek üzere bir URI şeması tanımlayın. Şema aşağıdaki şekilde tanımlanır:broadcastradio://program/<primary ID type>/<primary ID>? <secondary ID type>=<secondary ID>&<secondary ID type>=<secondary ID>
Bu örnekte, ikincil tanımlayıcılar bölümü (soru işaretinden (
?
) sonra) isteğe bağlıdır vemediaId
olarak kullanılacak sabit bir tanımlayıcı sağlamak için kaldırılabilir. Örnek:broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=88500&AMFM_FREQUENCY=103300
broadcastradio://program/AMFM_FREQUENCY/102100
broadcastradio://program/DAB_SID_EXT/14895264?RDS_PI=1234
program
'ün yetkili bölümü (diğer adıyla barındırıcı), gelecekte şema uzantısı için biraz alan sağlar. Tanımlayıcı türü dizeleri,IdentifierType
'nin HAL 2.x tanımındaki adları olarak tam olarak belirtilir ve değer biçimi, ondalık veya onaltılık (0x
ön ekiyle) bir sayıdır.Tüm tedarikçiye özgü tanımlayıcılar
VENDOR_
ön ekiyle temsil edilir. Örneğin,VENDOR_START
içinVENDOR_0
veVENDOR_START
artı 1 içinVENDOR_1
. Bu tür URI'ler, oluşturuldukları radyo donanımına özeldir ve farklı OEM'ler tarafından üretilen cihazlar arasında aktarılamaz.Bu URI'ler, üst düzey radyo klasörlerindeki her MediaItem'e atanmalıdır. Ayrıca MediaSession hem
playFromMediaId
hem deplayFromUri
'yi desteklemelidir. Ancak URI, öncelikle radyo meta verilerinin (ör. FM frekansı) çıkarılması ve kalıcı depolama için tasarlanmıştır. URI'nin tüm medya öğeleri için kullanılabileceği garanti edilmez (ör. birincil kimlik türü henüz çerçeve tarafından desteklenmiyorsa). Öte yandan, medya kimliği her zaman çalışır. İstemcilerin, mevcut MediaBrowser oturumundan öğe seçmek için URI kullanması önerilmez. Bunun yerineplayFromMediaId
kullanın. Bununla birlikte, yayınlayan uygulama için isteğe bağlı değildir ve eksik URI'ler, iyi gerekçelendirilmiş durumlar için ayrılmıştır.İlk tasarımda, şema kısmından sonra
://
dizisi yerine tek bir iki nokta üst üste işareti kullanılıyordu. Ancak mutlak hiyerarşik URI referansları içinandroid.net.Uri
,Diğer kaynak türleri
Diğer ses kaynakları da benzer şekilde ele alınabilir. Örneğin, yardımcı giriş ve ses CD'si çalar.
Tek bir uygulama birden fazla kaynak türü sunabilir. Bu tür durumlarda, her kaynak türü için ayrı bir MediaBrowserService oluşturmanız önerilir. Birden fazla sunulmuş kaynak/MediaBrowserServices içeren bir kurulumda bile tek bir uygulamada tek bir MediaSession'ın olması önemle tavsiye edilir.
Ses CD'si
Bu tür diskleri sunan uygulamanın, MediaBrowser'ı tek bir taranabilir girişle (veya sistemde CD değiştirici varsa daha fazla girişle) göstermesi açısından ses CD'sine benzer. Bu girişler de belirli bir CD'nin tüm parçalarını içerir. Sistem, her CD'deki parçalar hakkında bilgi sahibi değilse (örneğin, tüm diskler bir kartuşa aynı anda takıldığında ve kartuş bunların tamamını okumadığında) diskin tamamı için MediaItem,
BROWSABLE
artıPLAYABLE
yerine yalnızcaPLAYABLE
olur. Belirli bir yuvada disk yoksa öğePLAYABLE
veyaBROWSABLE
olmaz (ancak her yuva ağaçta her zaman bulunmalıdır).Bu girişler, yayın radyosu klasörlerine benzer şekilde işaretlenir ve MediaDescription API'de tanımlanan ek alanlar içerir:
EXTRA_CD_TRACK
: Ses CD'sindeki herMediaItem
için 1 tabanlı parça numarası.EXTRA_CD_DISK
: 1 tabanlı disk numarası.
CD-Text özellikli sistem ve uyumlu disk için üst düzey MediaItem öğesinde diskin başlığı bulunur. Benzer şekilde, parçalar için MediaItems öğesinde parçanın başlığı bulunur.
Yardımcı giriş
Yardımcı giriş sunan uygulama, AUX giriş bağlantı noktasını temsil eden tek bir girişe (veya birden fazla bağlantı noktası varsa daha fazla girişe) sahip bir MediaBrowser ağacı gösterir. İlgili MediaSession,
playFromMediaId
isteğini aldıktan sonra mediaId değerini alır ve bu kaynağa geçer.Her AUX MediaItem girişinde, "AUX" ifadesi olmadan bağlantı noktasının yerelleştirilmemiş adına ayarlanmış
EXTRA_AUX_PORT_NAME
adlı ek bir alan bulunur. Örneğin, "AUX 1" "1", "AUX ön" "ön" ve "AUX" boş bir dize olarak ayarlanır. İngilizce olmayan yerel ayarlarda ad etiketi, aynı İngilizce dize olarak kalır.EXTRA_BCRADIO_BAND_NAME_EN
için olası değildir. Değerler OEM tarafından tanımlanır ve önceden tanımlanmış bir listeyle sınırlı değildir.Donanım, AUX bağlantı noktasına bağlı cihazları algılayabiliyorsa yalnızca giriş bağlıysa MediaItem öğesini
PLAYABLE
olarak işaretlemelidir. Bu bağlantı noktasına hiçbir şey bağlanmamışsa donanım yine de numaralandırılır (ancakPLAYABLE
olarak değil). Donanımda böyle bir özellik yoksa MediaItem her zamanPLAYABLE
olarak ayarlanmalıdır.Ek alanlar
Aşağıdaki alanları tanımlayın:
EXTRA_CD_TRACK = "android.media.extra.CD_TRACK"
EXTRA_CD_DISK = "android.media.extra.CD_DISK"
EXTRA_AUX_PORT_NAME = "android.media.extra.AUX_PORT_NAME"
Müşterinin,
EXTRA_CD_DISK
veyaEXTRA_AUX_PORT_NAME
ek alanının ayarlandığı öğeler için üst düzey MediaItems öğelerini incelemesi gerekir.Ayrıntılı örnekler
Aşağıdaki örneklerde, bu tasarımın parçası olan kaynak türleri için MediaBrowser ağaç yapısı ele alınmaktadır.
Radyo yayını MediaBrowserService (
ACTION_PLAY_BROADCASTRADIO
kimliği):- İstasyonlar (gezilebilir)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_PROGRAMS
- BBC One (oynatılabilir) URI'si:
broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=90500
- ABC 88.1 (oynatılabilir) URI'si:
broadcastradio://program/RDS_PI/5678?AMFM_FREQUENCY=88100
- ABC 88.1 HD1 (oynatılabilir) URI'si:
broadcastradio://program/HD_STATION_ID_EXT/158241DEADBEEF?AMFM_FREQUENCY=88100&RDS_PI=5678
- ABC 88.1 HD2 (oynatılabilir) URI:
broadcastradio://program/HD_STATION_ID_EXT/158242DEADBEFE
- 90.5 FM (oynatılabilir) - RDSURI olmadan FM:
broadcastradio://program/AMFM_FREQUENCY/90500
- 620 AM (oynatılabilir) URI:
broadcastradio://program/AMFM_FREQUENCY/620
- BBC One (oynatılabilir) URI'si:
broadcastradio://program/DAB_SID_EXT/1E24102?RDS_PI=1234
- BBC One (oynatılabilir) URI'si:
- Favoriler (gezilebilir, oynatılabilir)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_FAVORITES
- BBC One (oynatılabilir) URI'si:
broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=101300
- BBC Two (oynatılamıyor) URI'si:
broadcastradio://program/RDS_PI/1300?AMFM_FREQUENCY=102100
- BBC One (oynatılabilir) URI'si:
- AM (gezilebilir, oynatılabilir):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="AM"
- 530 AM (oynatılabilir) URI:
broadcastradio://program/AMFM_FREQUENCY/530
- 540 AM (oynatılabilir) URI:
broadcastradio://program/AMFM_FREQUENCY/540
- 550 AM (oynatılabilir) URI:
broadcastradio://program/AMFM_FREQUENCY/550
- 530 AM (oynatılabilir) URI:
- FM (gezilebilir, oynatılabilir):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="FM"
- 87.7 FM (oynatılabilir) URI:
broadcastradio://program/AMFM_FREQUENCY/87700
- 87.9 FM (oynatılabilir) URI:
broadcastradio://program/AMFM_FREQUENCY/87900
- 88.1 FM (oynatılabilir) URI:
broadcastradio://program/AMFM_FREQUENCY/88100
- 87.7 FM (oynatılabilir) URI:
- DAB (oynatılabilir):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="DAB"
Ses CD'si MediaBrowserService (
ACTION_PLAY_AUDIOCD
kimlikleri):- Disk 1 (oynatılabilir)
EXTRA_CD_DISK=1
- 2. Disk (gezilebilir, oynatılabilir)
EXTRA_CD_DISK=2
- 1. parça (oynatılabilir)
EXTRA_CD_TRACK=1
- 2. parça (oynatılabilir)
EXTRA_CD_TRACK=2
- 1. parça (oynatılabilir)
- Müzik CD'm (gezilebilir, oynatılabilir)
EXTRA_CD_DISK=3
- All By Myself (playable)
EXTRA_CD_TRACK=1
- Reise, Reise (oynanabilir)
EXTRA_CD_TRACK=2
- All By Myself (playable)
- 4. yuva boş (oynatılamaz)
EXTRA_CD_DISK=4
AUX MediaBrowserService (
ACTION_PLAY_AUX
kimliği):- AUX ön (oynatılabilir)
EXTRA_AUX_PORT_NAME="front"
- Arka AUX (oynatılabilir)
EXTRA_AUX_PORT_NAME="rear"