Radyo kontrolünün uygulanması

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çme
  • onSetRating. 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.
MediaBrowserService ağaç yapısı
Şekil 2. MediaBrowserService ağaç yapısı

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çin ProgramSelector başlıklı makaleyi inceleyin.

    Performans veya ciltleyiciyle ilgili sorunları önlemek için MediaBrowser hizmeti sayfalandırmayı desteklemelidir:

    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ı olarak onSkipToNext'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çin FLAG_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 oynatma

    Hangi 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çin ACTION_PLAY_BROADCASTRADIO intent'iyle (Genel oynatma intent'leri bölümüne bakın) ve MATCH_SYSTEM_ONLY işaretiyle resolveService 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çin MediaBrowser örneği oluşturun. Bağlantı kurulduktan sonra getSessionToken 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:

    1. Radyo hizmetini keşfedin (ACTION_PLAY_BROADCASTRADIO için resolveService numaralı telefonu arayın).
    2. MediaBrowser oluşturup ardından bu hesaba bağlanın.
    3. MediaItem'ün EXTRA_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-Text
    • android.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ı belirtmeden
    • android.car.intent.action.PLAY_BLUETOOTH
    • android.car.intent.action.PLAY_USB: Hangi USB cihazın
    • android.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'ün MediaBrowser veya MediaSession 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 ve mediaId 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çin VENDOR_0 ve VENDOR_START artı 1 için VENDOR_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 de playFromUri'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 yerine playFromMediaId 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çin android.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ızca PLAYABLE olur. Belirli bir yuvada disk yoksa öğe PLAYABLE veya BROWSABLE olmaz (ancak her yuva ağaçta her zaman bulunmalıdır).

     Ses CD&#39;si ağaç yapısı
    Şekil 3. Ses CD'si ağaç yapısı.

    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 her MediaItem 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.

    AUX ağaç yapısı
    Şekil 4. AUX ağaç yapısı.

    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 (ancak PLAYABLE olarak değil). Donanımda böyle bir özellik yoksa MediaItem her zaman PLAYABLE 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 veya EXTRA_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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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"