Bu sayfada radyonun donanım ve yazılım düzeyinde nasıl uygulanacağı açıklanmaktadır.
- Sistem bileşenleri radyo teknolojisi yığınını gösterir ve açıklar.
- Yayın radyo donanımı soyutlama katmanı (HAL), OEM'lerin AM/FM ve dijital ses yayını (DAB) radyosu gibi radyo yayınlarını donanım düzeyinde uygulaması için veri yapıları ve arayüzler sağlar.
- Radyo kontrolü uygulaması, Medya ve sesli asistan uygulamalarının radyoyu kontrol etmesini sağlayan
MediaSession
veMediaBrowse
dayanmaktadır. Aşağıda sağlanan içeriğe ek olarak bkz. Arabalar için medya uygulamaları oluşturma .
Sistem bileşenleri
Yayın radyo yığını aşağıdaki bileşenleri içerir.
Radyo referans uygulaması
Radyo kontrolünün nasıl uygulanacağına ilişkin ayrıntılar için bkz. Radyo kontrolü uygulaması .
Örnek bir Java radyo uygulaması ( packages/apps/Car/Radio
) referans uygulaması görevi görür. Uygulama hizmeti başlatıldığında Radyo Yöneticisinden bir Radyo Ayarlayıcı açmasını ister. Daha sonra uygulama, Radyo Tuner'a belirli bir radyo istasyonunu, frekansı ayarlama veya bir sonraki mevcut radyo istasyonunu arama gibi istekler gönderebilir. Uygulama, Radyodaki Radyo Yöneticisi ve Radyo Tuner'dan güncel program bilgileri, radyo programı listeleri, konfigürasyonlar ve satıcı tarafından tanımlanan parametreler gibi güncellemeleri alır. Referans Radyo uygulaması yalnızca AM ve FM radyoyu destekler. OEM'ler Radyo uygulamasını istedikleri gibi değiştirebilir veya değiştirebilir.
Radyo Yöneticisi
Uygulama, Radio Manager'dan bir ayarlayıcı açmasını talep ettiğinde, Radyo Yöneticisi ( frameworks/base/core/java/android/hardware/radio/RadioManager.java
) Yayın Radyo Hizmeti'nden bir Ayarlayıcı oturumu açmasını ister ve ardından oturumu bir oturumda sarar. Uygulamaya döndürülen Radyo Ayarlayıcı ( frameworks/base/core/java/android/hardware/radio/RadioTuner.java
). Radyo Tuner, radyo uygulamalarından çağrılabilecek ve Radyo Yayını Hizmetine istek gönderilebilecek API'leri (ayarlama, adımlama ve iptal etme gibi) tanımlar. Radyo Tuner'da tanımlanan geri arama yöntemleri ( RadioTuner.Callback
), Radyo Yayını Hizmetinden uygulamalara geçerli program bilgileri, program listeleri ve satıcı tarafından tanımlanan parametreler gibi yayın radyo HAL'sine ilişkin güncellemeleri gönderir.
Radyo Yayını Hizmeti
Yayın Radyo Hizmeti ( frameworks/base/services/core/java/com/android/server/broadcastradio
), Yayın Radyo HAL'ye yönelik istemci hizmetidir. Yayın Radyo Hizmeti, birden fazla Radyo Yöneticisini Yayın Radyo HAL'leriyle koordine eder. Yayın Radyo Hizmeti , HAL arayüz tanım dilini (HIDL) ve Android arayüz tanım dilini (AIDL) yayın radyo HAL'lerini destekler. Radyo Yayını Hizmeti, herhangi bir AIDL HAL hizmeti mevcut olduğunda AIDL HAL'e bağlanır; aksi takdirde hizmet HIDL HAL'e bağlanır. Yayın Radyo Hizmeti, mevcut her HAL örneği için (AM, FM ve DAB gibi) bir Radyo Modülü oluşturur.
Her Radyo Yöneticisi, Radyo Yayını Hizmetinden, radyo türüne bağlı olarak ilgili Radyo Modülünde bir ayarlayıcı oturumu oluşturmasını talep edebilir. Her ayarlayıcı oturumu, ilgili yayın radyo HAL örneğinde işlemleri gerçekleştirmek için ayarlama, adımlama ve iptal etme (HAL arayüzlerinde tanımlanan) gibi yöntemleri çağırabilir. Bir ayarlayıcı oturumu, bir HAL güncellemesinde HAL örneğinden geçerli program bilgisi, program listesi, yapılandırma işaretleri ve satıcı parametreleri gibi bir geri arama aldığında, güncellemeyle ilgili geri aramalar aynı Radyo Modülüne bağlı tüm Radyo Ayarlayıcılara gönderilir.
Radyo HAL yayını
Yayın radyosunun HIDL ve AIDL arayüzleri ve ikisi arasındaki farklar hakkında daha fazla bilgi edinmek için bkz . Radyo Yayını HAL arayüzü .
Yayın radyo donanımı soyutlama katmanı
Aşağıdaki bölümlerde radyo yayını uygulamak için donanım soyutlama katmanı (HAL) ile nasıl çalışılacağı açıklanmaktadır.
Yayın radyo HAL arayüzü
Yayın radyosu HAL, AM/FM ve DAB radyo gibi radyo yayınını uygulamak için donanım düzeyinde veri yapıları ve arayüzler sağlar.
HIDL 2.0 ve AIDL arayüzleri
Yayın radyosu HAL, aşağıdaki bölümlerde açıklanan arayüzleri kullanır.
Duyuru dinleyicisi
IAnnouncementListener
, duyuruları almak üzere yayın radyosu HAL'e kaydedilebilen duyuru dinleyicisinin geri arama arayüzüdür. Arayüz aşağıdaki yöntemlere sahiptir:
IDuyuruDinleyici | ||
---|---|---|
Açıklama: Duyuru listesi değiştiğinde çağrılır. | ||
HDL 2.0 | oneway onListUpdated(vec<Announcement> announcements) | |
AIDL | oneway void onListUpdated(in Announcement[] announcements) |
Tutamağı kapat
ICloseHandle
etkin bir arayüze ihtiyaç duymayan bir geri aramayı kaldırmak için kullanılan genel kapatma tanıtıcısıdır.
ICloseHandle | ||
---|---|---|
Açıklama: Kolu kapatın. | ||
HDL 2.0 | close() | |
AIDL | void close() |
Geri arama arayüzü
ITunerCallback
, HAL istemci hizmetine güncellemeler göndermek için yayın radyosu HAL tarafından çağrılan geri arama arayüzüdür.
ITunerGeri arama | ||
---|---|---|
Açıklama: Bir ayarlama işlemi (ayarlama, arama (AIDL'de) veya tarama (HIDL'de) ve adım başarılı olduğunda) eşzamansız olarak başarısız olduğunda HAL tarafından çağrılır. | ||
HDL 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) | |
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) | |
Açıklama: Ayarlama, arama (AIDL'de) veya tarama (HIDL'de) veya adım başarılı olduğunda çağrılır. | ||
HDL 2.0 | oneway onTuneFailed(Result result, ProgramSelector selector) | |
AIDL | void onTuneFailed(in Result result, in ProgramSelector selector) | |
Açıklama: Ayarlama, arama (AIDL'de) veya tarama (HIDL'de) veya adım başarılı olduğunda çağrılır. | ||
HDL 2.0 | oneway onCurrentProgramInfoChanged(ProgramInfo info) | |
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) | |
Açıklama: Program listesi güncellendiğinde çağrılır; her bir parçanın boyutu 500kiB ile sınırlı olmalıdır. | ||
HDL 2.0 | oneway onProgramListUpdated(ProgramListChunk chunk) | |
AIDL | oneway onProgramListUpdated(ProgramListChunk chunk) | |
Açıklama: Anten bağlandığında veya bağlantısı kesildiğinde çağrılır. | ||
HDL 2.0 | oneway onAntennaStateChange(bool connected) | |
AIDL | void onCurrentProgramInfoChanged(in ProgramInfo info) | |
Açıklama: Satıcıya özgü parametre değerleri HAL'de dahili olarak güncellendiğinde çağrılır (HAL istemcisi tarafından setParameters çağrıldıktan sonra çağrılmamalıdır). | ||
HDL 2.0 | oneway onParametersUpdated(vec<VendorKeyValue> parameters) | |
AIDL | void onParametersUpdated(in VendorKeyValue[] parameters) | |
Açıklama: AIDL'de yeni. HAL'de yapılandırma bayrağı dahili olarak güncellendiğinde çağrılır (HAL istemcisi tarafından setConfigFlag çağrıldıktan sonra çağrılmamalıdır). | ||
HDL 2.0 | Uygulanamaz. | |
AIDL | void onConfigFlagUpdated(in ConfigFlag flag, in boolean value) |
Birincil yayın radyo HAL arayüzü
IBroadcastRadio
HAL radyo yayını için birincil arayüzdür. HIDL 2.0 HAL'de, işlemleri çağırmak için tuner için ITunerSession
arayüzünü kullanın. Ancak aynı anda en fazla bir ayarlayıcı etkindir (her yayın radyo HAL örneğinin yalnızca bir ayarlayıcı çipine sahip olması koşuluyla). ITunerSession
, AIDL arayüzlerinden kaldırıldı ve arayüzleri IBroadcastRadio
taşındı.
IYayınRadyo | ||
---|---|---|
Açıklama: Bir modülün ve yeteneklerinin açıklamasını alın. | ||
HDL 2.0 | getProperties() generates (Properties properties) | |
AIDL | Properties getProperties() | |
Açıklama: Geçerli veya olası AM/FM bölge yapılandırmasını getirir. | ||
HDL 2.0 | getAmFmRegionConfig(bool full) generates (Result result, AmFmRegionConfig config) | |
AIDL | AmFmRegionConfig getAmFmRegionConfig(bool full) | |
Açıklama: Geçerli DAB bölgesi yapılandırmasını getirir. | ||
HDL 2.0 | getDabRegionConfig() generates (Result result, vec<DabTableEntry> config) | |
AIDL | DabTableEntry[] getDabRegionConfig() | |
Açıklama: Radyo modülü önbelleğinden bir görüntü alır. AIDL'de, ciltleyici işlem arabelleğindeki sabit sınır nedeniyle görüntü boyutunun 1 MB'tan az olması gerekir. | ||
HDL 2.0 | getImage(uint32_t id) generates (vec<uint8_t> image) | |
AIDL | byte[] getImage(in int id) | |
Açıklama: Duyuru dinleyicisini kaydeder. | ||
HDL 2.0 | registerAnnouncementListener(vec<AnnouncementType> enabled,IAnnouncementListener listener) generates (Result result, ICloseHandle closeHandle) | |
AIDL | ICloseHandle registerAnnouncementListener(in IAnnouncementListener listener, in AnnouncementType[] enabled) | |
Tanım:
| ||
HDL 2.0 | openSession(ITunerCallback callback) şunu üretir (Result result, ITunerSession session) | |
AIDL | void setTunerCallback(in ITunerCallback callback) | |
Tanım:
| ||
HDL 2.0 | close() | |
AIDL | unsetTunerCallback() | |
Açıklama: Belirtilen bir programa ayarlar. | ||
HDL 2.0 | tune(ProgramSelector program) generates (Result result) | |
AIDL | void tune(in ProgramSelector program) | |
Açıklama: Yayındaki bir sonraki geçerli programı arar. AIDL'de karışıklığı önlemek için scan , seek olarak yeniden adlandırıldı. | ||
HDL 2.0 | scan(bool directionUp, bool skipSubChannel) generates (Result result) | |
AIDL | void seek(in boolean directionUp, in boolean skipSubChannel) | |
Açıklama: Herhangi bir program tarafından işgal edilmeyen bitişik kanala giden adımlar. | ||
HDL 2.0 | step(bool directionUp) generates (Result result) | |
AIDL | void step(in boolean directionUp) | |
Açıklama: Bekleyen melodiyi, taramayı (HIDL'de) veya aramayı (AIDL'de) veya adım işlemlerini iptal eder. | ||
HDL 2.0 | cancel() | |
AIDL | void cancel() | |
Açıklama: Program listesine bir filtre uygular ve onProgramListUpdated geri çağrısı üzerinden program listesi güncellemelerini göndermeye başlar. | ||
HDL 2.0 | startProgramListUpdates(ProgramFilter filter) generates (Result result) | |
AIDL | void startProgramListUpdates(in ProgramFilter filter) | |
Açıklama: Program listesi güncellemelerinin gönderilmesini durdurur. | ||
HDL 2.0 | stopProgramListUpdates() | |
AIDL | void stopProgramListUpdates() | |
Açıklama: Belirli bir yapılandırma bayrağının geçerli ayarını getirir. | ||
HDL 2.0 | isConfigFlagSet(ConfigFlag flag) generates (Result result, bool value) | |
AIDL | boolean isConfigFlagSet(in ConfigFlag flag) | |
Açıklama: Verilen yapılandırma bayrağını ayarlar. | ||
HDL 2.0 | setConfigFlag(ConfigFlag flag, bool value) generates (Result result) | |
AIDL | void setConfigFlag(in ConfigFlag flag, boolean value) | |
Açıklama: Satıcıya özel parametre değerlerini ayarlar. | ||
HDL 2.0 | setParameters(vec<VendorKeyValue> parameters) üretir , (vec<VendorKeyValue> results) | |
AIDL | VendorKeyValue[] setParameters(in VendorKeyValue[] parameters) | |
Açıklama: Satıcıya özel parametre değerlerini alır. | ||
HDL 2.0 | getParameters(vec<string> keys) generates (vec<VendorKeyValue> parameters) | |
AIDL | VendorKeyValue[] getParameters(in String[] keys) |
Arayüz açıklamaları
Eşzamansız davranış
Her bir ayarlama işlemi (örneğin, ayarlama, tarama (HIDL'de) veya arama (AIDL'de) ve adım) zaman alıcı olabileceğinden ve iş parçacığının uzun süre bloke edilmemesi gerektiğinden, işlemin zaman tüketen işlemleri planlaması gerekir. daha sonra meydana gelir ve hızlı bir şekilde bir durum veya sonuç döndürür. Ayrıntılı olarak, her işlem şunları yapmalıdır:
- Bekleyen tüm ayarlama işlemlerini iptal edin.
- Yöntem girişlerine ve ayarlayıcının durumuna göre işlemin gerçekleştirilip gerçekleştirilemeyeceğini kontrol edin.
- Ayarlama görevini planlayın ve ardından
Result
(HIDL'de) veyastatus
(AIDL'de) hemen geri gönderin.Result
veyastatus
OK
ise, ayarlama görevi başarısız olduğunda (örneğin, zaman aşımı nedeniyle) veya tamamlandığında ayarlayıcı geri çağırmatuneFailed
veyacurrentProgramInfoChanged
çağrılmalıdır.
Benzer şekilde, startProgramListUpdates
ayrıca zaman alan program listesini güncelleme görevini daha sonra gerçekleşecek ve hızlı bir şekilde durum veya sonuç döndürecek şekilde planlar. Yöntem önce bekleyen güncelleme isteklerini iptal eder, ardından güncelleme görevini planlar ve sonucu hızlı bir şekilde döndürür.
Yarış kondisyonu
Ayarlama işlemlerinin (örneğin ayarlama, tarama (HIDL'de) veya arama (AIDL'de) ve adım) eşzamansız davranışı nedeniyle, işlemin iptal edilmesi ile ayarlama işlemleri arasında bir yarış durumu mevcuttur. HAL bir ayarlama işlemini tamamladıktan sonra ve geri arama tamamlanmadan önce cancel
çağrılırsa, iptal göz ardı edilebilir ve geri arama tamamlanmalı ve HAL istemcisi tarafından alınmalıdır.
Benzer şekilde, HAL bir program listesi güncellemesini tamamladıktan sonra ve onCurrentProgramInfoChanged
geri çağırma tamamlanmadan önce stopProgramListUpdates
çağrılırsa, stopProgramListUpdates
göz ardı edilebilir ve geri aramanın tamamlanması gerekir.
Veri boyutu sınırı
Bağlayıcı işlem arabelleğinde sabit bir sınır olduğundan, potansiyel olarak büyük boyuttaki verileri geçiren bazı arayüz yöntemleri için veri sınırı, AIDL HAL'de açıklığa kavuşturulmuştur.
-
getImage
döndürülen görüntünün 1 MB'tan küçük olmasını gerektirir. -
onProgramListUpdate
herchunk
500kiB'den az olmasını gerektirir. Daha büyük program listelerinin HAL uygulaması tarafından birden fazla parçaya bölünmesi ve birden fazla geri arama yoluyla gönderilmesi gerekir.
AIDL HAL veri yapılarındaki değişiklikler
Arayüzlerdeki değişikliklerin yanı sıra bu değişiklikler, AIDL'den yararlanan yayın radyosu AIDL HAL'de tanımlanan veri yapılarına da uygulanmıştır.
-
Constant
numaralandırma AIDL'de kaldırılır veIBroadcastRadio
const int olarak tanımlanır. Bu aradaANTENNA_DISCONNECTED_TIMEOUT_MS
,ANTENNA_STATE_CHANGE_TIMEOUT_MS
olarak yeniden adlandırıldı. Yeni bir const intTUNER_TIMEOUT_MS
eklendi. Tüm ayar, arama ve adım işlemlerinin bu süre içerisinde tamamlanması gerekir. - Enum
RDS
veDeemphasis
AIDL'de kaldırılır veAmFmRegionConfig
const int olarak tanımlanır. Buna uygun olarak,ProgramInfo
hemfmDeemphasis
hem defmRds
ilgili bayrakların bir bit hesaplama sonucu olan int olarak bildirilir. Bu aradaD50
veD75
sırasıylaDEEMPHASIS_D50
veDEEMPHASIS_D75
olarak yeniden adlandırıldı. - Enum
ProgramInfoFlags
AIDL'de kaldırılır veProgramInfo
FLAG_
öneki eklenerek const int olarak tanımlanır. Buna uygun olarak,ProgramInfo
infoFlags
bayrakların bir bit hesaplama sonucu olan int olarak bildirilir.TUNED
ayrıca istasyonun ayarlanabileceği tanımını daha iyi tanımlamak içinFLAG_TUNABLE
olarak yeniden adlandırılmıştır. -
AmFmBandRange
,scan
AIDL'deseek
olarak yeniden adlandırıldığından,scanSpacing
,seekSpacing
olarak yeniden adlandırılmıştır. - AIDL'de birleşim kavramı ortaya çıktığı için HIDL HAL'de tanımlanan
MetadataKey
veMetadata
artık kullanılmamaktadır. AIDL HAL'de bir AIDL birliğiMetadata
tanımlanır. Daha önceMetadataKey
bulunan her enum değeri artıkMetadata
, tanımlarına bağlı olarak string veya int türünde bir alandır.
Radyo kontrol uygulaması
Radyo kontrolü uygulaması, Medya ve sesli asistan uygulamalarının radyoyu kontrol etmesini sağlayan MediaSession
ve MediaBrowse
dayanmaktadır. Daha fazla bilgi için Developer.android.com adresinde Arabalar için medya uygulamaları oluşturma konusuna bakın.
packages/apps/Car/libs
içindeki car-broadcastradio-support kitaplığında bir medya tarama ağacı uygulaması sağlanır. Bu kitaplık aynı zamanda URI'ye ve URI'den dönüştürülecek ProgramSelector uzantılarını da içerir. İlgili göz atma ağacını oluşturmak için radyo uygulamalarının bu kitaplığı kullanması önerilir.
Medya kaynağı değiştirici
Radyo ile medyada görüntülenen diğer uygulamalar arasında kusursuz bir geçiş sağlamak için, araç-medya-ortak kitaplığı, radyo uygulamasına entegre edilmesi gereken sınıfları içerir. MediaAppSelectorWidget
radyo uygulaması için XML'e dahil edilebilir (referans medya ve radyo uygulamalarında kullanılan simge ve açılır menü):
<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, değiştirilebilecek medya kaynaklarının listesini görüntüleyen AppSelectionFragment
öğesini başlatır. Sağlananın dışında bir kullanıcı arayüzü isteniyorsa, değiştiricinin görüntülenmesi 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
içinde bulunan referans radyo uygulaması uygulamasında örnek bir uygulama sağlanmıştır.
Ayrıntılı kontrol özellikleri
MediaSession
( MediaSession.Callback
aracılığıyla) arayüzü, o anda oynatılan radyo programı için kontrol mekanizmaları sağlar:
-
onPlay
,onStop
. Radyo çalmanın sesini kapatma (açma). -
onPause
. Zaman kaydırmalı duraklama (destekleniyorsa). -
onPlayFromMediaId
. Üst düzey bir klasördeki herhangi bir içeriği oynatın. Örneğin, "FM Çal" veya "Radyo Çal". -
onPlayFromUri
. Belirli bir frekansı çalın. Örneğin, "88.5 FM'i çal." -
onSkipToNext
,onSkipToPrevious
. Sonraki veya önceki istasyona geçin. -
onSetRating
. Favorilere ekleyin veya Favorilerden kaldırın.
MediaBrowser, üç tür üst düzey dizin üzerinde ayarlanabilir bir MediaItem sunar:
- ( İsteğe bağlı ) Programlar (istasyonlar). Bu mod genellikle çift ayarlı radyolar tarafından kullanıcının bulunduğu yerdeki tüm ayarlanabilir radyo istasyonlarını belirtmek için kullanılır.
- Favoriler. Favoriler listesine eklenen radyo programlarından bazıları kullanılamayabilir (alım aralığı dışında).
- Bant kanalları. Mevcut bölgedeki 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 grubun ayrı bir üst düzey dizini vardır.
Bu klasörlerin (AM/FM/Programlar) her birindeki her öğe, ayarlamak için MediaSession ile kullanılabilecek bir URI'ye sahip bir MediaItem'dir. Her üst düzey klasör (AM/FM/Programlar), MediaSession ile oynatmayı tetiklemek için kullanılabilen ve OEM'in takdirine bağlı olan, mediaID'ye sahip bir MediaItem'dir. Örneğin, "FM Çal", "AM Çal" ve "Radyo Çal", OEM radyo uygulamasına göndermek için bir mediaId kullanan, spesifik olmayan radyo sorgularıdır. Genel istek ve mediaId'den neyin çalınacağını belirlemek radyo uygulamasına kalmıştır.
Medya Oturumu
Bir yayın akışını duraklatma kavramı olmadığı için Oynat, Duraklat ve Durdur eylemleri radyo için her zaman geçerli değildir. Radyoda, Durdur eylemi akışın kapatılmasıyla ilişkilendirilirken Oynat, sessizliğin kaldırılmasıyla ilişkilendirilir.
Bazı radyo ayarlayıcıları (veya uygulamaları), içeriği önbelleğe alıp daha sonra oynatarak yayın akışı duraklatmasını simüle etme yeteneği sağlar. Bu gibi durumlarda onPause
kullanın.
MediaId ve URI eylemlerinden oynatmanın amacı, MediaBrowser arayüzünden getirilen bir istasyonu ayarlamaktır. MediaId, belirli bir istasyonu tanımlamak için benzersiz (böylece belirli bir kimlik yalnızca bir öğeyi işaret eder) ve sabit (böylece belirli bir öğe tüm oturum boyunca aynı kimliğe sahiptir) bir değer empoze etmek için radyo uygulaması tarafından sağlanan rastgele bir dizedir. . URI iyi tanımlanmış bir şemaya sahip olacaktır. Kısacası, ProgramSelector'ın URI'li bir formu. Bu, teklik özelliğini korurken, istasyon farklı bir frekansa geçtiğinde değişebilmesine rağmen, kararlı olması gerekmez.
Tasarım gereği onPlayFromSearch
kullanılmaz. MediaBrowser ağacından bir arama sonucu seçmek müşterinin (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ünmesi gerektiğine ilişkin resmi sözleşmeler gerektirecek ve farklı donanım platformlarında eşit olmayan bir kullanıcı deneyimine yol açacaktır.
Not: Radyo uygulaması, MediaBrowser arayüzü aracılığıyla istemciye gösterilmeyen bir istasyon adını aramak için yararlı olabilecek ek bilgiler içermez.
Sonraki veya önceki istasyona atlamak mevcut bağlama bağlıdır:
- Bir uygulama Favoriler listesinden bir istasyona ayarlandığında uygulama, Favoriler listesinden bir sonraki istasyona geçebilir.
- Program listesinden bir istasyonun dinlenmesi, kanal numarasına göre sıralanmış bir sonraki mevcut istasyonun ayarlanmasıyla sonuçlanabilir.
- Rastgele bir kanalın dinlenmesi, yayın sinyali olmasa bile bir sonraki fiziksel kanala geçilmesiyle sonuçlanabilir.
Radyo uygulaması bu eylemleri gerçekleştirir.
Hata yönetimi
TransportControls
eylemleri (Oynat, Durdur ve Sonraki), eylemin başarılı olup olmadığına ilişkin geri bildirim sağlamaz. Bir hatayı belirtmenin tek yolu MediaSession durumunu bir hata mesajıyla STATE_ERROR
olarak ayarlamaktır.
Radyo uygulamasının bu eylemleri gerçekleştirmesi ve bunları yürütmesi veya bir hata durumu ayarlaması gerekir. Çalma komutunun yürütülmesi anında değilse, komut yürütülürken çalma durumu STATE_CONNECTING
(doğrudan ayarlama durumunda) veya STATE_SKIPPING_TO_PREVIOUS
veya NEXT
olarak değiştirilmelidir.
İstemci PlaybackState
izlemeli ve oturumun mevcut programı istenen programa değiştirdiğini veya hata durumuna girildiğini doğrulamalıdır. STATE_CONNECTING
30 saniyeyi geçmemelidir. Ancak belirli bir AM/FM frekansına doğrudan ayar yapılması çok daha hızlı performans göstermelidir.
Favorileri ekleme ve kaldırma
MediaSession, Sık Kullanılanları kontrol etmek için kullanılabilecek derecelendirme desteğine sahiptir. RATING_HEART
türünde bir derecelendirmeyle çağrılan onSetRating
, o anda ayarlanan istasyonu Favoriler listesine ekler veya bu listeden çıkarır.
Eski ön ayarların aksine, bu model, kaydedilen her favorinin sayısal bir yuvaya (tipik olarak 1'den 6'ya) tahsis edildiği sırasız ve sınırsız bir Favoriler listesini varsayar. Sonuç olarak, ön ayar tabanlı sistemler onSetRating
işlemiyle uyumsuz olacaktır.
MediaSession API'nin sınırlaması, yalnızca o anda ayarlı olan istasyonun eklenebilmesi veya kaldırılabilmesidir. Örneğin, öğelerin kaldırılabilmesi için önce seçilmesi gerekir. Bu, eşlik eden bir uygulama gibi yalnızca MediaBrowser istemcisinin bir sınırlamasıdır. Radyo uygulaması da benzer şekilde kısıtlanmamıştır. Bir uygulama Sık Kullanılanları desteklemediğinde bu bölüm isteğe bağlıdır.
Medya Tarayıcı
Belirli bir bölge için 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 ifade etmek 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 (0,2MHz aralık kullanarak) 101 FM kanalına ve 530 ila 1700 kHz aralığında (10kHz aralık kullanarak) 117 AM kanalına karşılık gelir. HD radyo aynı kanal alanını kullandığından ayrı olarak sunulmaz.
Şu anda mevcut olan radyo programlarının listesi, doğrudan ses yayını (DAB) grubuna göre gruplandırma gibi görüntüleme şemalarına izin vermemesi nedeniyle düzdür.
Favori listesindeki girişler ayarlanamayabilir. Örneğin belirli bir program aralık dışındaysa. Radyo uygulaması, girişin önceden ayarlanıp ayarlanamayacağını algılayabilir veya algılamayabilir. Bu durumda, girişi oynanabilir olarak işaretlemeyebilir.
Üst düzey klasörleri tanımlamak için Bluetooth tarafından kullanılan mekanizmanın aynısı uygulanır. Yani, MediaDescription
nesnesinin bir Ekstra paketi, tıpkı Bluetooth'un EXTRA_BT_FOLDER_TYPE
ile yaptığı gibi tunere özgü bir alan içerir. Radyo yayını durumunda bu, genel 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 mevcut programlar. -
BCRADIO_FOLDER_TYPE_FAVORITES = 2
. Favoriler. -
BCRADIO_FOLDER_TYPE_BAND = 3
. Belirli bir bant için tüm fiziksel kanallar.
İlgili tüm veriler mevcut
MediaBrowser.MediaItem
şemasına uyduğu için radyoya özgü özel meta veri alanları tanımlamaya gerek yoktur:- Program adı (RDS PS, DAB hizmet adı).
MediaDescription.getTitle
. - FM frekansı. URI (bkz. ProgramSelector ) veya
MediaDescription.getTitle
(bir girişBROADCASTRADIO_FOLDER_TYPE_BAND
klasöründeyse). - Radyoya özgü tanımlayıcılar (RDS PI, DAB SId).
MediaDescription.getMediaUri
ProgramSelector'a ayrıştırıldı.
Tipik olarak mevcut programdaki veya Favoriler listesindeki bir giriş için FM frekansını almaya gerek yoktur (istemcinin medya kimlikleri üzerinde çalışması gerektiği için). Ancak böyle bir ihtiyaç ortaya çıkarsa (örneğin görüntüleme amacıyla), URI'de bulunur ve
ProgramSelector
ayrıştırılabilir. Bununla birlikte, geçerli oturumdaki öğeleri seçmek için URI'nin kullanılması önerilmez. Ayrıntılar için bkz.ProgramSelector
.Performans veya ciltleyiciyle ilgili sorunları önlemek için MediaBrowser hizmetinin sayfalandırmayı desteklemesi gerekir:
-
EXTRA_PAGE
-
EXTRA_PAGE_SIZE
-
subscribe()
için ekstra parametreler
Not: Varsayılan olarak sayfalandırma,
onLoadChildren()
değişkeninde seçenek yönetimi olmadan varsayılan olarak uygulanır.Tüm liste türlerindeki (ham kanallar, bulunan programlar ve favoriler) ilgili girişlerin farklı mediaId'leri olabilir (bu radyo uygulamasına bağlıdır; destek kütüphanesinde bunlar farklı olacaktır). URI'ler (ProgramSelector biçiminde), çoğu durumda ham kanallar ve bulunan programlar arasında farklılık gösterir (RDS'siz FM hariç), ancak bulunan programlar ve favoriler arasında çoğunlukla aynıdır (örneğin, AF'nin güncellendiği durumlar hariç).
Farklı türdeki listelerdeki girişler için farklı mediaId'lere sahip olmak, bunlar üzerinde farklı eylemlerin gerçekleştirilmesini mümkün kılar. Son seçilen
MediaItem
klasörüne bağlı olarakonSkipToNext
Favoriler listesinde veya Tüm Programlar listesinde gezinebilirsiniz (bkz. MediaSession ).Özel ayar eylemleri
Program listesi, kullanıcıların belirli bir istasyonu ayarlamasına olanak tanır ancak kullanıcıların, FM bandında yakın zamanda dinlenen bir istasyonun ayarlanmasıyla sonuçlanabilecek "FM'ye Ayarla" gibi genel isteklerde bulunmasına izin vermez.
Bu tür eylemleri desteklemek için bazı üst düzey dizinlerde
FLAG_PLAYABLE
bayrağı seti bulunur (klasörler içinFLAG_BROWSABLE
ile birlikte).Aksiyon Melodiler Nasıl verilir Radyo çal Herhangi bir radyo kanalı startService(ACTION_PLAY_BROADCASTRADIO)
veya
playFromMediaId(MediaBrowser. getRoot() )
FM çal Herhangi bir FM kanalı FM bandının mediaId
çalın.Hangi programın ayarlanacağının belirlenmesi uygulamaya bağlıdır. Bu genellikle verilen listeden en son ayarlanan kanaldır.
ACTION_PLAY_BROADCASTRADIO
ile ilgili ayrıntılar için bkz. Genel oynatma amaçları .Keşif ve servis bağlantısı
PackageManager
yayın radyo ağacını sunan MediaBrowserService'i doğrudan bulabilir. Bunu yapmak için,ACTION_PLAY_BROADCASTRADIO
amacı (bkz. Genel oynatma amaçları ) veMATCH_SYSTEM_ONLY
bayrağıylaresolveService
çağırın. Radyoya hizmet veren tüm hizmetleri bulmak için (birden fazla olabilir; örneğin, ayrı AM/FM ve uydu)queryIntentServices
kullanın.Çözümlenen hizmet,
android.media.browse.MediaBrowserService
bağlama amacını da yönetir. Bu GTS ile doğrulanmıştır.Seçilen MediaBrowserService'e bağlanmak için belirli bir hizmet bileşenine yönelik
MediaBrowser
örneği oluşturun veconnect
. Bağlantı kurulduktan sonragetSessionToken
aracılığıyla MediaSession'a bir tanıtıcı elde edilebilir.Radyo uygulaması, hizmetlerinin
onGetRoot
uygulamasında bağlanmasına izin verilen istemci paketlerini kısıtlayabilir. Uygulama, sistem uygulamalarının beyaz listeye alınmadan bağlanmasına izin vermelidir. Beyaz listeye almayla ilgili ayrıntılar için bkz. Asistan uygulama paketini ve imzayı kabul etme .Kaynağa özgü uygulama (örneğin, bir radyo uygulaması) bu tür bir kaynak desteği olmayan bir cihaza kurulursa, kendisini yine de
ACTION_PLAY_BROADCASTRADIO
amacını işliyormuş gibi tanıtacaktır, ancak MediaBrowser ağacı radyoya özgü etiketler içermeyecektir. Bu nedenle, belirli bir kaynağın bir cihazda mevcut olup olmadığını kontrol etmek isteyen bir müşteri:- Radyo hizmetini keşfedin (
ACTION_PLAY_BROADCASTRADIO
içinresolveService
arayın). -
MediaBrowser
oluşturun ve ardından ona bağlanın. -
EXTRA_BCRADIO_FOLDER_TYPE
ekstra ileMediaItem
varlığını belirleyin.
Not: Çoğu durumda, istemcinin belirli bir cihaz için mevcut tüm kaynakları tespit etmek amacıyla mevcut tüm MediaBrowser ağaçlarını taraması gerekir.
Grup isimleri
Bant listesi, klasör türü etiketi
BCRADIO_FOLDER_TYPE_BAND
olarak ayarlanmış bir dizi üst düzey dizin tarafından temsil edilir.MediaItem
başlıkları grup adlarını temsil eden yerelleştirilmiş dizelerdir. Çoğu durumda İngilizce çeviriyle aynı olacaktır ancak müşteri bu varsayıma güvenemez.Belirli bantları aramak için istikrarlı bir mekanizma sağlamak amacıyla, bant klasörleri için ekstra bir etiket eklenmiştir:
EXTRA_BCRADIO_BAND_NAME_EN
. Bu, grubun yerelleştirilmemiş bir adıdır ve önceden tanımlanmış şu değerlerden yalnızca birini alabilir:-
AM
-
FM
-
DAB
Eğer grup bu listede yoksa grup isim etiketi ayarlanmamalıdır. Ancak grup listede yer alıyorsa etiket setinin olması gerekir. HD radyo, AM/FM ile aynı temel ortamı kullandığından ayrı bantları numaralandırmaz.
Genel oyun amaçları
Belirli bir kaynağı (radyo veya CD gibi) oynatmaya adanmış her uygulamanın, bazı içerikleri muhtemelen etkin olmayan durumdan (örneğin, önyüklemeden sonra) oynatmaya başlaması için genel bir oynatma amacını karşılaması gerekir. Çalınacak içeriğin nasıl seçileceği uygulamaya bağlıdır, ancak bu genellikle yakın zamanda çalınan radyo programı veya CD parçasıdır. Her ses kaynağı için tanımlanmış ayrı bir amaç vardır:
-
android.car.intent.action.PLAY_BROADCASTRADIO
-
android.car.intent.action.PLAY_AUDIOCD
: CD-DA veya CD Metni -
android.car.intent.action.PLAY_DATADISC
: CD/DVD gibi optik veri diski, ancak CD-DA değil (Karma Mod CD 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ı belirtmeden -
android.car.intent.action.PLAY_LOCAL
: Yerel medya depolama (dahili flaş)
Amaçlar genel oynatma komutu için kullanılmak üzere seçildi çünkü aynı anda iki sorunu çözüyorlar: genel oynatma komutunun kendisi ve hizmet keşfi. Böyle bir niyete sahip olmanın ek faydası, MediaBrowser oturumunu açmadan bu kadar basit bir eylemi gerçekleştirme olasılığı olacaktır.
Hizmet keşfi aslında bu amaçlarla çözülen en önemli sorundur. Hizmet keşfi prosedürü bu şekilde kolay ve nettir (bkz. Keşif ve hizmet bağlantısı ).
Bazı istemci uygulamalarını kolaylaştırmak için, bu tür Oynat komutunu vermenin alternatif bir yolu vardır (bunun radyo uygulaması tarafından da uygulanması gerekir): kök düğümün rootId'si ile
playFromMediaId
verilmesi (mediaId olarak kullanılır). Kök düğümün oynatılabilir olması amaçlanmasa da, rootId'si mediaId olarak tüketilebilecek isteğe bağlı bir dizedir. Ancak müşterilerin bu nüansı anlaması gerekli değildir.Program Seçici
mediaId
MediaBrowserService
bir kanal seçmek için yeterli olsa da, bir oturuma bağlı hale gelir ve sağlayıcılar arasında tutarlı olmaz. Bazı durumlarda istemci, oturumlar ve cihazlar arasında bunu sürdürmek için mutlak bir işaretçiye (mutlak frekans gibi) ihtiyaç duyabilir.Dijital radyo yayınları çağında, belirli bir istasyonu ayarlamak için yalnızca bir frekans yeterli değildir. Bu nedenle, analog veya dijital bir kanala ayarlamak için
ProgramSelector
kullanın.ProgramSelector
iki bölümden oluşur:- Birincil tanımlayıcı. Belirli bir radyo istasyonu için değişmeyen, ancak o istasyonu ayarlamak için yeterli olmayabilen benzersiz ve kararlı bir tanımlayıcı. Örneğin, ABD'deki çağrı işaretine çevrilebilecek RDS PI kodu.
- İkincil tanımlayıcılar. Muhtemelen diğer radyo teknolojilerinden gelen tanımlayıcıları da içeren, o istasyonu ayarlamak için yararlı olan ek tanımlayıcılar (örneğin frekans). Örneğin, bir DAB istasyonunun analog yayın geri dönüşü olabilir.
ProgramSelector
MediaBrowser
veyaMediaSession
tabanlı çözüme sığmasını sağlamak için onu serileştirmek üzere bir URI şeması tanımlayın. Şema şu ş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 kısmı (soru işaretinden (
?
) sonra) isteğe bağlıdır vemediaId
olarak kullanılacak kararlı bir tanımlayıcı sağlamak üzere kaldırılabilir. Örneğin:-
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
yetki kısmı (AKA ana bilgisayarı), gelecekte planın genişletilmesi için bir miktar alan sağlar. Tanımlayıcı türü dizeleri,IdentifierType
HAL 2.x tanımında tam olarak adları olarak belirtilir ve değer biçimi, ondalık veya onaltılık (0x
önekiyle) bir sayıdır.Satıcıya özel tüm tanımlayıcılar
VENDOR_
önekiyle temsil edilir. Örneğin,VENDOR_START
içinVENDOR_0
veVENDOR_START
içinVENDOR_1
artı 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'lerin üst düzey radyo klasörleri altındaki her MediaItem'e atanması gerekir. Ayrıca MediaSession'ın hem
playFromMediaId
hem deplayFromUri
desteklemesi gerekir. Bununla birlikte, URI öncelikle radyo meta verilerinin çıkarılması (FM frekansı gibi) ve kalıcı depolama için tasarlanmıştır. URI'nin tüm medya öğeleri için mevcut olacağının garantisi yoktur (örneğin, birincil kimlik türü henüz çerçeve tarafından desteklenmediğinde). Öte yandan Media ID her zaman çalışır. İstemcilerin geçerli MediaBrowser oturumundaki öğeleri seçmek için URI kullanması önerilmez . Bunun yerineplayFromMediaId
kullanın. Bununla birlikte, hizmet veren uygulama için bu isteğe bağlı değildir ve eksik URI'ler, haklı gerekçelere sahip durumlar için ayrılmıştır.İlk tasarımda, şema kısmından sonra
://
dizisi yerine tek bir iki nokta üst üste kullanıldı. Ancak birincisi, mutlak hiyerarşik URI referansları içinandroid.net.Uri
tarafından desteklenmez.Diğer kaynak türleri
Diğer ses kaynakları da benzer şekilde ele alınabilir. Örneğin, yardımcı giriş ve Ses CD'si oynatıcı.
Tek bir uygulama birden fazla kaynak türüne hizmet edebilir. Bu gibi durumlarda, her kaynak türü için ayrı bir MediaBrowserService oluşturmanız önerilir . Birden fazla sunulan kaynağın/MediaBrowserServices'in bulunduğu bir kurulumda bile, tek bir uygulama içinde tek bir MediaSession'ın olması önemle tavsiye edilir .
Ses CD'si
Ses CD'sine benzer, çünkü bu tür disklere hizmet veren uygulama MediaBrowser'ı tek bir göz atılabilir girişle (veya sistemde bir CD değiştirici varsa daha fazla) gösterir ve bu giriş de belirli bir CD'nin tüm parçalarını içerir. Sistem her CD'deki parçalar hakkında bilgiye sahip değilse (örneğin, tüm diskler aynı anda bir kartuşa takıldığında ve hepsini okumadığında), o zaman tüm disk için MediaItem yalnızca
PLAYABLE
olur, değilBROWSABLE
artıPLAYABLE
. Belirli bir yuvada disk yoksa, öğe nePLAYABLE
ne deBROWSABLE
olur (ancak her yuva her zaman ağaçta mevcut olmalıdır).Bu girişler radyo yayını klasörlerine benzer şekilde işaretlenecektir; MediaDescription API'sinde tanımlanan ek ekstra alanları içerirler:
-
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 diskin bir başlığına sahip olacaktır. Benzer şekilde, parçalar için MediaItems parçanın başlığına sahip olacaktır.
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ı mevcut olduğunda daha fazlasına) sahip bir MediaBrowser ağacını ortaya çıkarır. İlgili MediaSession, mediaId'sini alır ve
playFromMediaId
isteğini aldıktan sonra bu kaynağa geçer.Her AUX MediaItem girişinde, "AUX" ifadesi olmadan bağlantı noktasının yerelleştirilmemiş adına ayarlanmış ekstra bir
EXTRA_AUX_PORT_NAME
alanı bulunur. Örneğin, "AUX 1" "1" olarak, "AUX ön" "ön" olarak ve "AUX" boş bir dize olarak ayarlanmış olmalıdır. İngilizce olmayan yerel ayarlarda ad etiketi aynı İngilizce dizeyle kalır.EXTRA_BCRADIO_BAND_NAME_EN
için olduğu gibi, değerler OEM tanımlıdır ve önceden tanımlanmış bir listeyle sınırlandırılmamıştır.Donanım AUX bağlantı noktasına bağlı aygıtları algılayabiliyorsa, donanım, yalnızca giriş bağlandığında MediaItem'i
PLAYABLE
olarak işaretlemelidir. Bu bağlantı noktasına hiçbir şey bağlanmadıysa, donanım hala numaralandırılmalı (ancakPLAYABLE
). Donanımın böyle bir özelliği yoksa, MediaTem her zamanPLAYABLE
olarak ayarlanmalıdır.Ekstra 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üşterin,
EXTRA_CD_DISK
veyaEXTRA_AUX_PORT_NAME
ekstra alan setine sahip öğeler için üst düzey ortamları gözden geçirmesi gerekir.Ayrıntılı örnekler
Aşağıdaki örnekler, bu tasarımın bir parçası olan kaynak türleri için Medibrowser ağacı yapısını ele almaktadır.
Radio MediAbrowserService yayın (
ACTION_PLAY_BROADCASTRADIO
kullanır):- İstasyonlar (taranabilir)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_PROGRAMS
- BBC One (oynanabilir) URI:
broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=90500
- ABC 88.1 (Oynanabilir) URI:
broadcastradio://program/RDS_PI/5678?AMFM_FREQUENCY=88100
- ABC 88.1 HD1 (Oynanabilir) URI:
broadcastradio://program/HD_STATION_ID_EXT/158241DEADBEEF?AMFM_FREQUENCY=88100&RDS_PI=5678
- ABC 88.1 HD2 (Oynanabilir) URI:
broadcastradio://program/HD_STATION_ID_EXT/158242DEADBEFE
- 90.5 FM (oynanabilir) - Rdsuri olmadan FM:
broadcastradio://program/AMFM_FREQUENCY/90500
- 620 AM (Oynanabilir) Uri:
broadcastradio://program/AMFM_FREQUENCY/620
- BBC One (oynanabilir) URI:
broadcastradio://program/DAB_SID_EXT/1E24102?RDS_PI=1234
- BBC One (oynanabilir) URI:
- Sık Kullanılanlar (Taranabilir, Oynanabilir)
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_FAVORITES
- BBC One (oynanabilir) URI:
broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=101300
- BBC Two (oynanamaz) URI:
broadcastradio://program/RDS_PI/1300?AMFM_FREQUENCY=102100
- BBC One (oynanabilir) URI:
- AM (taranabilir, oynanabilir):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="AM"
- 530 AM (Oynanabilir) Uri:
broadcastradio://program/AMFM_FREQUENCY/530
- 540 am (oynanabilir) URI:
broadcastradio://program/AMFM_FREQUENCY/540
- 550 am (oynanabilir) Uri:
broadcastradio://program/AMFM_FREQUENCY/550
- 530 AM (Oynanabilir) Uri:
- FM (taranabilir, oynanabilir):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="FM"
- 87.7 FM (Oynanabilir) URI:
broadcastradio://program/AMFM_FREQUENCY/87700
- 87.9 FM (Oynanabilir) Uri:
broadcastradio://program/AMFM_FREQUENCY/87900
- 88.1 FM (Oynanabilir) URI:
broadcastradio://program/AMFM_FREQUENCY/88100
- 87.7 FM (Oynanabilir) URI:
- Dab (oynanabilir):
EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="DAB"
Audio CD MediAbrowserService (
ACTION_PLAY_AUDIOCD
işleri):- Disk 1 (oynanabilir)
EXTRA_CD_DISK=1
- Disk 2 (göz atılabilir, oynanabilir)
EXTRA_CD_DISK=2
- Parça 1 (oynanabilir)
EXTRA_CD_TRACK=1
- Parça 2 (oynanabilir)
EXTRA_CD_TRACK=2
- Parça 1 (oynanabilir)
- Müzik CD'm (göz atılabilir, oynanabilir)
EXTRA_CD_DISK=3
- Hepsi tek başıma (oynanabilir)
EXTRA_CD_TRACK=1
- Reise, Reise (oynanabilir)
EXTRA_CD_TRACK=2
- Hepsi tek başıma (oynanabilir)
- Boş yuva 4 (oynatılamaz)
EXTRA_CD_DISK=4
Aux MediAbrowserService (
ACTION_PLAY_AUX
işleri):- AUX Front (oynanabilir)
EXTRA_AUX_PORT_NAME="front"
- Aux arka (oynanabilir)
EXTRA_AUX_PORT_NAME="rear"
-