रेडियो कंट्रोल की सुविधा को लागू करना

रेडियो कंट्रोल को लागू करने की प्रोसेस, MediaSession और MediaBrowse, जो इन कामों के लिए मीडिया और वॉइस असिस्टेंट ऐप्लिकेशन को चालू करता है रेडियो कंट्रोल करो. ज़्यादा जानकारी के लिए, यह देखें developer.android.com पर, कार के लिए मीडिया ऐप्लिकेशन बनाएं.

कार-Broadcastradio-सहायता में मीडिया ब्राउज़ ट्री लागू करने की सुविधा दी जाती है packages/apps/Car/libs में लाइब्रेरी. इस लाइब्रेरी में इसके एक्सटेंशन भी हैं Program Selector को यूआरआई में बदलना और उसे यूआरआई से बदलना. हमारा सुझाव है कि रेडियो स्टेशन को इस लाइब्रेरी का इस्तेमाल, इससे जुड़ा ब्राउज़ ट्री बनाने के लिए करें.

मीडिया सोर्स स्विचर

मीडिया में दिखाए गए रेडियो ऐप्लिकेशन और अन्य ऐप्लिकेशन के बीच आसानी से ट्रांज़िशन करने के लिए, कार-मीडिया-सामान्य लाइब्रेरी में ऐसी क्लास होती हैं जिन्हें रेडियो में इंटिग्रेट किया जाना चाहिए है. MediaAppSelectorWidget को रेडियो ऐप्लिकेशन के लिए एक्सएमएल में शामिल किया जा सकता है (रेफ़रंस मीडिया और रेडियो ऐप्लिकेशन में इस्तेमाल किया गया आइकॉन और ड्रॉप-डाउन):

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

यह विजेट AppSelectionFragment को लॉन्च करता है, जो उन मीडिया सोर्स की सूची जिन पर स्विच किया जा सकता है. अगर दिए गए यूज़र इंटरफ़ेस (यूआई) के बजाय कोई दूसरा यूज़र इंटरफ़ेस (यूआई) चाहिए, तो आपके पास AppSelectionFragment लॉन्च करने के लिए कस्टम विजेट बनाने का विकल्प होगा. स्विचर दिखाई देना चाहिए.

AppSelectionFragment newFragment = AppSelectionFragment.create(widget,
            packageName, fullScreen);
    newFragment.show(mActivity.getSupportFragmentManager(), null);

रेफ़रंस रेडियो ऐप्लिकेशन को लागू करने के तरीके में, लागू करने का एक सैंपल दिया गया है, packages/apps/Car/Radio में मौजूद है.

कंट्रोल से जुड़ी ज़्यादा जानकारी

MediaSession (MediaSession.Callback से) इंटरफ़ेस वर्तमान में चल रहे रेडियो प्रोग्राम के लिए नियंत्रण तंत्र प्रदान करता है:

  • onPlay, onStop. रेडियो प्लेबैक को म्यूट (अन) करने करें.
  • onPause. टाइम-शिफ़्टेड पॉज़ (अगर यह सुविधा उपलब्ध हो).
  • onPlayFromMediaId. टॉप-लेवल फ़ोल्डर से कोई भी कॉन्टेंट चलाएं. उदाहरण के लिए, "FM चलाओ" या "रेडियो चलाओ" कहें.
  • onPlayFromUri. कोई खास फ़्रीक्वेंसी चलाएँ. उदाहरण के लिए, "88.5 FM चलाओ."
  • onSkipToNext, onSkipToPrevious. किसी अगले या पिछले वीडियो पर जाना स्टेशन.
  • onSetRating. 'पसंदीदा' में जोड़ना या हटाना.

The MediaBrowser एक ट्यून करने योग्य वीडियो दिखाता है तीन तरह की टॉप लेवल डायरेक्ट्री पर MediaItem:

  • (ज़रूरी नहीं) प्रोग्राम (स्टेशन). आम तौर पर, इस मोड का इस्तेमाल इन कामों के लिए किया जाता है उपयोगकर्ता की जगह पर उपलब्ध सभी ट्यून किए जा सकने वाले रेडियो स्टेशन को दिखाने के लिए, ड्यूअल-ट्यूनर रेडियो.
  • पसंदीदा. पसंदीदा सूची में जोड़े गए रेडियो प्रोग्राम. इनमें से कुछ उपलब्ध नहीं है (रिसेप्शन रेंज से बाहर).
  • बैंड चैनल. मौजूदा क्षेत्र में सभी संभव चैनल (87.9, 88.1, 88.3, 88.5, 88.7, 88.9, 89.1 वगैरह). हर बैंड की एक अलग टॉप-लेवल डायरेक्ट्री होती है.
MediaBrowserService ट्री संरचना
दूसरी इमेज. MediaBrowserService ट्री स्ट्रक्चर

इनमें से हर फ़ोल्डर (AM/FM/Programs) का हर एलिमेंट, यूआरआई के साथ MediaItem है जिसका इस्तेमाल किया जा सकता है मीडिया को ट्यून करने के लिए. हर टॉप-लेवल फ़ोल्डर (AM/FM/Programs) एक MediaItem है, जिसका MediaId है, जो मीडिया सेशन के साथ इस्तेमाल किया जा सकता है, ताकि प्लेबैक को ट्रिगर किया जा सके. यह OEM के विवेक पर निर्भर करता है. इसके लिए उदाहरण के लिए, "FM चलाओ," "AM चलाओ" और "रेडियो चलाओ" सभी सामान्य रेडियो क्वेरी हैं जो OEM रेडियो ऐप्लिकेशन पर भेजने के लिए MediaId. यह रेडियो ऐप्लिकेशन पर निर्भर करता है कि इस रेडियो ऐप्लिकेशन से क्या चलाया जाए सामान्य अनुरोध और MediaId का इस्तेमाल करता है.

मीडिया सेशन

ब्रॉडकास्ट स्ट्रीम को रोकने का कोई सिद्धांत नहीं है. इसलिए, स्ट्रीम को चलाने, रोकने, और रोकने से जुड़ी कार्रवाइयां हमेशा रेडियो पर लागू नहीं होता. रेडियो स्टेशन को रोकने की कार्रवाई, स्ट्रीम को म्यूट करने से जुड़ी है जब Play म्यूट को हटाने के लिए जुड़ा होता है.

कुछ रेडियो ट्यूनर या ऐप्लिकेशन, ब्रॉडकास्ट स्ट्रीम को रोकने के लिए सिम्युलेशन की सुविधा देते हैं कॉन्टेंट कैश मेमोरी में सेव कर सकते हैं और फिर बाद में चला सकते हैं. ऐसे मामलों में, onPause का इस्तेमाल करें.

MediaId और यूआरआई कार्रवाइयों से चलाने का मकसद है कि आप किसी स्टेशन को ट्यून करें MediaBrowser इंटरफ़ेस से फ़ेच किया गया. MediaId एक आर्बिट्रेरी स्ट्रिंग है यूनीक आईडी लागू करने के लिए रेडियो ऐप्लिकेशन से मिलने वाला डेटा (इसलिए, दिया गया आईडी सिर्फ़ एक आइटम को पॉइंट करता है) और स्थिर मान (इसलिए, पूरे सेशन के दौरान किसी आइटम का आईडी एक ही रहता है) का इस्तेमाल करें. यूआरआई एक अच्छे स्कीमा का होगा. संक्षेप में, एक यूआरआई ProgramSelector का फ़ॉर्म भरने के लिए किया जा सकता है. हालांकि, यह यूनिक्विटी एट्रिब्यूट को बनाए रखता है, लेकिन ज़रूरी नहीं है कि स्थिर हो, हालांकि स्टेशन के किसी दूसरी फ़्रीक्वेंसी पर जाने पर यह बदल सकता है.

डिज़ाइन के हिसाब से, onPlayFromSearch का इस्तेमाल नहीं किया गया है. यह क्लाइंट की ज़िम्मेदारी है (साथी ऐप्लिकेशन) का इस्तेमाल करें. घूम-फिर रहा है इसलिए, रेडियो ऐप्लिकेशन के लिए यह ज़िम्मेदारी अब और मुश्किल हो जाएगी कि प्लैटफ़ॉर्म को इस्तेमाल करने के लिए, स्ट्रिंग क्वेरी दिखनी चाहिए और इनकी वजह से अलग-अलग हार्डवेयर पर असमान उपयोगकर्ता अनुभव मिलता है प्लैटफ़ॉर्म.

ध्यान दें: रेडियो ऐप्लिकेशन में ऐसी जानकारी जिसकी मदद से ऐसे स्टेशन का नाम खोजा जा सकता है जो क्लाइंट को नहीं दिखाया गया हो के तरीके उपलब्ध हैं.

मौजूदा संदर्भ के आधार पर, आप अगले या पिछले स्टेशन पर जा सकते हैं:

  • जब किसी ऐप्लिकेशन को पसंदीदा सूची में शामिल किसी स्टेशन के लिए ट्यून किया जाता है, तो वह ऐप्लिकेशन पसंदीदा सूची से अगले स्टेशन पर जा सकते हैं.
  • कार्यक्रम की सूची में से किसी स्टेशन को सुनने पर, आपका अगला स्टेशन ट्यून हो सकता है उपलब्ध स्टेशन, चैनल नंबर के अनुसार क्रम में लगाया गया.
  • आर्बिट्रेरी चैनल को सुनने से अगले फ़िज़िकल चैनल को ट्यून किया जा सकता है, ऐसा तब भी होता है, जब कोई ब्रॉडकास्ट सिग्नल न हो.

ये कार्रवाइयां रेडियो ऐप्लिकेशन पर मैनेज की जाती हैं.

गड़बड़ी ठीक करना

TransportControls अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है कार्रवाइयों (चलाएं, बंद करें, और आगे बढ़ें) से इस बारे में कोई सुझाव नहीं मिलता कि कार्रवाई को चलाया गया या नहीं सफल हो या नहीं. सिर्फ़ मीडिया सेशन को सेट करके गड़बड़ी के बारे में बताया जा सकता है राज्य से STATE_ERROR अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है को गड़बड़ी का मैसेज दिखेगा.

रेडियो ऐप्लिकेशन को उन कार्रवाइयों को मैनेज करना होगा और उन्हें एक्ज़ीक्यूट करना होगा या कोई गड़बड़ी का स्टेटस सेट करना होगा. अगर Play निर्देश को तुरंत लागू नहीं किया जा सकता, तो प्लेबैक की स्थिति को बदलकर STATE_CONNECTING अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है (डायरेक्ट ट्यून के मामले में) या STATE_SKIPPING_TO_PREVIOUS या NEXT कमांड इस्तेमाल करते समय.

क्लाइंट को PlaybackState देखना चाहिए और पुष्टि कर सकता है कि सेशन ने मौजूदा प्रोग्राम को बदल दिया है, जो कि अनुरोध किया गया था या जो गड़बड़ी की स्थिति. STATE_CONNECTING 30 सेकंड से ज़्यादा नहीं होना चाहिए. हालांकि, किसी विज्ञापन को एएम/एफ़एम फ़्रीक्वेंसी पहले से ज़्यादा तेज़ होनी चाहिए.

'पसंदीदा' में जोड़ें और हटाएं

Mediasession में रेटिंग की सुविधा है. इसका इस्तेमाल पसंदीदा कंट्रोल को कंट्रोल करने के लिए किया जा सकता है. onSetRating अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है कॉल करने के दौरान इस तरह की रेटिंग दी गई हो RATING_HEART मौजूदा ट्यून किए गए स्टेशन को पसंदीदा की सूची में जोड़ता या उससे हटाता है.

लेगसी प्रीसेट के उलट, इस मॉडल में बिना क्रम वाले और बिना सीमा वाले पसंदीदा विकल्प है सूची में, जब सेव किए गए हर पसंदीदा को संख्या वाले स्लॉट (आम तौर पर, 1 से 6) में बांटा गया था. इस वजह से, प्रीसेट-आधारित सिस्टम onSetRating के साथ काम नहीं करेंगे कार्रवाई.

Mediasession API की सीमा यह है कि सिर्फ़ उस स्टेशन को ट्यून किया गया है जिसे फ़िलहाल ट्यून किया गया है को जोड़ा या हटाया जा सकता है. उदाहरण के लिए, आइटम चुनने से पहले उन्हें चुनना ज़रूरी है हटाया जा सकता है. यह सिर्फ़ MediaBrowser क्लाइंट की सीमा है, जैसे कि साथी ऐप्लिकेशन. रेडियो ऐप्लिकेशन पर इस तरह से पाबंदी नहीं लगाई गई है. यह हिस्सा ज़रूरी नहीं है जब किसी ऐप्लिकेशन में 'पसंदीदा' सुविधा काम न करती हो.

MediaBrowser

यह बताने के लिए कि फ़्रीक्वेंसी या फ़िज़िकल चैनल के नाम (ट्यून करते समय) के लिए मान्य हैं) दिए गए क्षेत्र में, हर बैंड के लिए सभी मान्य चैनल (फ़्रीक्वेंसी) शामिल होते हैं. यूएस क्षेत्र में, यह 87.8 से लेकर 87.8 की रेंज में 101 FM चैनलों तक की राशि है 108.0 मेगाहर्ट्ज़ रेंज (0.2 मेगाहर्ट्ज़ के स्पेस का इस्तेमाल करके) और 117 AM के चैनलों की रेंज 530 मेगाहर्ट्ज़ है 1700 किलोहर्ट्ज़ (kHz के बीच की दूरी का इस्तेमाल करके) तक. एचडी रेडियो में एक ही चैनल स्पेस का इस्तेमाल होता है, इसे अलग से नहीं दिखाया जाता.

मौजूदा समय में उपलब्ध रेडियो प्रोग्राम की सूची इस तरह से दी गई है कि इसकी अनुमति नहीं है डिसप्ले स्कीम, जैसे कि डायरेक्ट ऑडियो ब्रॉडकास्ट (डीएबी) एन्सेम्बल के हिसाब से ग्रुप करना.

हो सकता है कि पसंदीदा सूची में शामिल एंट्री को ट्यून न किया जा सके. उदाहरण के लिए, अगर किसी प्रोग्राम सीमा से बाहर है. रेडियो ऐप्लिकेशन यह पता लगा भी सकता है कि को पहले से ट्यून किया जा सकता है. अगर ऐसा है, तो हो सकता है कि यह एंट्री को 'चलाने लायक' के तौर पर मार्क न करे.

टॉप-लेवल फ़ोल्डर की पहचान करने के लिए, वही तरीका इस्तेमाल किया जाता है जो ब्लूटूथ के लिए इस्तेमाल किया जाता है. इसका मतलब है कि MediaDescription का एक Extras बंडल ऑब्जेक्ट में ट्यूनर के लिए खास फ़ील्ड मौजूद है, जैसा कि ब्लूटूथ EXTRA_BT_FOLDER_TYPE में करता है. ब्रॉडकास्ट रेडियो के मामले में, यह फ़ील्ड में नीचे दिए गए नए फ़ील्ड तय करता है सार्वजनिक एपीआई:

  • EXTRA_BCRADIO_FOLDER_TYPE = "android.media.extra.EXTRA_BCRADIO_FOLDER_TYPE". एक वैल्यू दिखेगी:
    • BCRADIO_FOLDER_TYPE_PROGRAMS = 1. वर्तमान में उपलब्ध प्रोग्राम.
    • BCRADIO_FOLDER_TYPE_FAVORITES = 2. पसंदीदा.
    • BCRADIO_FOLDER_TYPE_BAND = 3. किसी बैंड के लिए सभी फ़िज़िकल चैनल.

    रेडियो के लिए खास तौर पर बनाए गए कस्टम मेटाडेटा फ़ील्ड को तय करने की ज़रूरत नहीं है. सभी काम का डेटा, मौजूदा MediaBrowser.MediaItem स्कीम में फ़िट होता है:

    • प्रोग्राम का नाम (RDS PS, DAB सेवा का नाम). MediaDescription.getTitle.
    • एफ़एम फ़्रीक्वेंसी. यूआरआई (देखें ProgramSelector) या MediaDescription.getTitle (अगर BROADCASTRADIO_FOLDER_TYPE_BAND फ़ोल्डर में एंट्री है).
    • रेडियो के खास आइडेंटिफ़ायर (RDS PI, DAB SId). MediaDescription.getMediaUri को ProgramSelector में पार्स किया गया.

    आम तौर पर, इस मौजूदा प्रोग्राम या पसंदीदा कामों की सूची (क्योंकि क्लाइंट को मीडिया पर ऑपरेट करना चाहिए आईडी). हालांकि, अगर इस तरह की ज़रूरत पैदा होती है (उदाहरण के लिए, प्रदर्शन के उद्देश्य से), तो यूआरआई में मौजूद है और इसे ProgramSelector में पार्स किया जा सकता है. हालांकि, मौजूदा वैल्यू में से आइटम चुनने के लिए, यूआरआई का इस्तेमाल करने का सुझाव नहीं दिया जाता सत्र. जानकारी के लिए, यह देखें ProgramSelector.

    प्रदर्शन या बाइंडर-संबंधी समस्याओं से बचने के लिए, MediaBrowser सेवा को पृष्ठांकन का समर्थन करना चाहिए:

    ध्यान दें: डिफ़ॉल्ट रूप से, पेज पर नंबर डालना onLoadChildren() विकल्प हैंडलिंग के बिना वैरिएंट.

    सभी तरह की सूचियों से मिलती-जुलती एंट्री (रॉ चैनल, प्रोग्राम मिले और पसंदीदा के तौर पर) अलग-अलग MediaIds हो सकते हैं (यह रेडियो ऐप्लिकेशन पर निर्भर करता है; सहायता) लाइब्रेरी में दी गई जानकारी अलग-अलग होगी). यूआरआई (programSelector फ़ॉर्म में) अलग-अलग होते हैं ज़्यादातर मामलों में (एफ़एम को छोड़कर) रॉ चैनलों और प्रोग्राम के बीच में RDS नहीं होने चाहिए), लेकिन ज़्यादातर मिलते-जुलते प्रोग्राम और पसंदीदा प्रोग्राम में एक जैसे होते हैं. उदाहरण के लिए, जब AF अपडेट किया गया था).

    अलग-अलग तरह की सूचियों से एंट्री के लिए अलग-अलग MediaIds होने से इसलिए, उन पर अलग-अलग कार्रवाई की जा सकती है. आप या तो पसंदीदा सूची देख सकते हैं या हाल ही के फ़ोल्डर के आधार पर, onSkipToNext पर सभी प्रोग्राम की सूची MediaItem को चुना गया (देखें Mediaसेशन).

    ट्यून करने के लिए खास कार्रवाइयां

    प्रोग्राम की सूची की मदद से, उपयोगकर्ता किसी खास स्टेशन पर ट्यून कर सकते हैं. हालांकि, इसमें उपयोगकर्ताओं को ये काम करने की अनुमति नहीं होती "एफ़एम को ट्यून करो" जैसे सामान्य अनुरोध किए जा सकते हैं, जिसकी वजह से एफ़एम बैंड पर रेडियो स्टेशन से सुना.

    ऐसी कार्रवाइयों की सुविधा देने के लिए, कुछ टॉप-लेवल की डायरेक्ट्री में FLAG_PLAYABLE अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है फ़्लैग सेट (FLAG_BROWSABLE के साथ) फ़ोल्डर के लिए).

    कार्रवाई इस पर ट्यून किया जाता है जारी करने का तरीका
    रेडियो चलाएं कोई भी रेडियो चैनल startService(ACTION_PLAY_BROADCASTRADIO)

    या,

    playFromMediaId(MediaBrowser.getRoot())
    एफ़एम चलाओ कोई भी FM चैनल एफ़एम बैंड के mediaId से चलाएं.

    यह ऐप्लिकेशन पर निर्भर करता है कि किस प्रोग्राम को ट्यून करना है. यह है आम तौर पर, दी गई सूची में से उस चैनल के लिए हाल ही में ट्यून किए गए चैनल. जानकारी के लिए ACTION_PLAY_BROADCASTRADIO, देखें गेम से जुड़ी सामान्य बातें.

    खोज और सेवा कनेक्शन

    PackageManager सीधे MediaBrowserService दिखाने वाले ब्रॉडकास्ट रेडियो को ढूंढ सकता है पेड़ ऐसा करने के लिए, resolveService पर कॉल करें ACTION_PLAY_BROADCASTRADIO इंटेंट के साथ (देखें खेल से जुड़ी सामान्य बातें) और MATCH_SYSTEM_ONLY फ़्लैग. रेडियो सेवा देने वाली सभी सेवाएँ खोजने के लिए (वहां एक से ज़्यादा हो सकती है; उदाहरण के लिए, AM/FM और सैटलाइट को अलग-अलग करें), तो queryIntentServices.

    समाधान की गई सेवा, android.media.browse.MediaBrowserService बाइंड को हैंडल करती है इंटेंट भी पसंद है. GTS से इसकी पुष्टि हो गई है.

    चुने गए MediaBrowserService से कनेक्ट करने के लिए: बनाएं दिए गए सेवा के कॉम्पोनेंट के लिए MediaBrowser इंस्टेंस और connect. कनेक्शन बनाने के बाद, Mediaसेशन के लिए हैंडल हासिल करने के लिए इनके ज़रिए किया जा सकता है: getSessionToken.

    रेडियो ऐप्लिकेशन, यह तय कर सकता है कि कौनसे क्लाइंट पैकेज को onGetRoot अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है उनकी सेवाओं को लागू करना. ऐप्लिकेशन को, सिस्टम के ऐप्लिकेशन को कनेक्ट करने की अनुमति देनी चाहिए जिसे अनुमति नहीं दी गई है. वाइटलिस्ट करने के बारे में ज़्यादा जानने के लिए देखें Assistant ऐप्लिकेशन का पैकेज और हस्ताक्षर स्वीकार करें.

    अगर सोर्स के हिसाब से बनाया गया ऐप्लिकेशन (उदाहरण के लिए, कोई रेडियो ऐप्लिकेशन) बिना किसी स्रोत समर्थन के, यह अभी भी स्वयं को ACTION_PLAY_BROADCASTRADIO इंटेंट, लेकिन इसका MediaBrowser ट्री रेडियो-विशिष्ट टैग शामिल नहीं होने चाहिए. इसलिए, क्लाइंट यह जांच करने के लिए तैयार है कि सोर्स किसी डिवाइस पर उपलब्ध हो, ज़रूरी है कि:

    1. रेडियो सेवा खोजें (इसके लिए resolveService पर कॉल करें: ACTION_PLAY_BROADCASTRADIO).
    2. MediaBrowser बनाएं और फिर उससे कनेक्ट करें.
    3. EXTRA_BCRADIO_FOLDER_TYPE की मदद से MediaItem की मौजूदगी का पता लगाएं अतिरिक्त.

    ध्यान दें: ज़्यादातर मामलों में, क्लाइंट को सभी यूआरएल स्कैन करने होंगे किसी डिवाइस के लिए उपलब्ध सभी सोर्स का पता लगाने के लिए उपलब्ध MediaBrowser ट्री.

    बैंड के नाम

    बैंड की सूची को टॉप-लेवल की डायरेक्ट्री के एक सेट के ज़रिए दिखाया जाता है. इसमें एक फ़ोल्डर टाइप होता है टैग को BCRADIO_FOLDER_TYPE_BAND पर सेट किया गया है. उनके MediaItem टाइटल, स्थानीय भाषा में लिखी स्ट्रिंग होती हैं. इन स्ट्रिंग से बैंड के नाम का पता चलता है. ज़्यादातर मामलों में, ठीक उसी तरह है जैसे अंग्रेज़ी अनुवाद करता है, लेकिन क्लाइंट इस अनुमान पर निर्भर नहीं हो सकता.

    कुछ खास बैंड को खोजने का एक स्थिर तरीका उपलब्ध कराने के लिए, बैंड फ़ोल्डर, EXTRA_BCRADIO_BAND_NAME_EN के लिए अतिरिक्त टैग जोड़ा गया. यह है बैंड का एक गैर-स्थानीय भाषा में लिखा गया नाम है और वह इन पहले से तय की गई वैल्यू में से कोई एक ही ले सकता है:

    • AM
    • FM
    • DAB

    अगर बैंड इस सूची में नहीं है, तो बैंड नाम टैग सेट नहीं किया जाना चाहिए. हालांकि, अगर बैंड लिस्ट में है, तो उसके लिए एक टैग सेट होना ज़रूरी है. एचडी रेडियो काम नहीं करता अलग-अलग बैंड की गिनती करें, क्योंकि यह AM/FM के एक ही मीडियम का इस्तेमाल करता है.

    सामान्य गेम के इंटेंट

    दिए गए सोर्स (जैसे कि रेडियो या सीडी) को चलाने के लिए, खास तौर पर बनाए गए हर ऐप्लिकेशन को YouTube पर किसी कॉन्टेंट को चलाने के लिए, सामान्य play इंटेंट इनऐक्टिव स्थिति (उदाहरण के लिए, बूट के बाद) यह ऐप्लिकेशन पर निर्भर करता है कि अपनी पसंद के मुताबिक कॉन्टेंट कैसे चुनें बजाया जाता है, लेकिन आम तौर पर यह हाल ही में चलाया गया रेडियो प्रोग्राम या सीडी ट्रैक होता है. हर ऑडियो सोर्स के लिए तय किया गया इंटेंट:

    • android.car.intent.action.PLAY_BROADCASTRADIO
    • android.car.intent.action.PLAY_AUDIOCD: सीडी-डीए या सीडी-टेक्स्ट
    • android.car.intent.action.PLAY_DATADISC: ऑप्टिकल डेटा डिस्क पसंद CD/DVD, लेकिन CD-DA नहीं है (मिले-जुले मोड वाली सीडी हो सकती है)
    • android.car.intent.action.PLAY_AUX: यह बताए बिना कि कौनसा AUX पोर्ट
    • android.car.intent.action.PLAY_BLUETOOTH
    • android.car.intent.action.PLAY_USB: यह बताए बिना कि कौनसा यूएसबी डिवाइस
    • android.car.intent.action.PLAY_LOCAL: लोकल मीडिया स्टोरेज (बिल्टइन फ़्लैश)

    इंटेंट को सामान्य चलाने का निर्देश देने के लिए चुना गया था, क्योंकि इससे क्वेरी हल हो जाती है एक साथ दो समस्याएं: जनरल प्ले कमांड और सेवा खोज. इस तरह के इंटेंट होने का अतिरिक्त फ़ायदा यह होगा कि MediaBrowser सत्र खोले बिना सरल कार्रवाई कर सकते हैं.

    सेवा खोजना असल में, इन सभी के साथ हल होने वाली सबसे अहम समस्या है इंटेंट. इस तरीके से सेवा खोजने की प्रक्रिया आसान और स्पष्ट है (देखें खोज और सेवा कनेक्शन).

    क्लाइंट के कुछ विज्ञापनों को आसानी से लागू करने के लिए, इसका एक वैकल्पिक तरीका भी दिया गया है. Play के लिए ऐसा निर्देश जारी करना (जिसे रेडियो ऐप्लिकेशन पर भी लागू करना ज़रूरी हो): रूट नोड के रूट आईडी के साथ playFromMediaId को जारी करने का तरीका (इस तरह से इस्तेमाल किया जाता है MediaId). हालांकि रूट नोड इसे चलाया नहीं जा सकता है, इसका रूट आईडी एक आर्बिट्रेरी स्ट्रिंग है जिसे MediaId के रूप में इस्तेमाल किया जा सकता है. हालांकि, यह ज़रूरी नहीं है कि आसानी से समझने के लिए किया जा सकता है.

    प्रोग्राम सिलेक्टर

    किसी चैनल को चुनने के लिए, mediaId MediaBrowserService, यह एक सेशन तक सीमित हो जाता है और एक जैसा नहीं होता के बीच होता है. कुछ मामलों में क्लाइंट को ऐब्सलूट पॉइंटर की ज़रूरत पड़ सकती है (जैसे, कुल फ़्रीक्वेंसी) का इस्तेमाल किया जाता है.

    डिजिटल रेडियो ब्रॉडकास्ट के दौर में, अब सिर्फ़ फ़्रीक्वेंसी को सीमित करके किसी खास स्टेशन पर ट्यून किया जा सकता है. इसलिए, ट्यून करने के लिए ProgramSelector का इस्तेमाल करें ऐनलॉग या डिजिटल चैनल पर अपलोड कर सकते हैं. ProgramSelector के दो हिस्से होते हैं:

    • मुख्य आइडेंटिफ़ायर. दिए गए रेडियो के लिए यूनीक और स्टेबल आइडेंटिफ़ायर ऐसा स्टेशन जो बदलता नहीं है, लेकिन हो सकता है कि उस स्टेशन पर ट्यून करने के लिए शायद काफ़ी न हो. उदाहरण के लिए, RDS PI कोड, जिसे अमेरिका के कॉल साइन में बदला जा सकता है.
    • सेकंडरी आइडेंटिफ़ायर. ट्यूनिंग के लिए काम आने वाले अतिरिक्त आइडेंटिफ़ायर (जैसे कि फ़्रीक्वेंसी) को स्टेशन के लिए, शायद दूसरे आइडेंटिफ़ायर के आइडेंटिफ़ायर शामिल करें रेडियो टेक्नोलॉजी के लिए. उदाहरण के लिए, किसी DAB स्टेशन में ऐनालॉग ब्रॉडकास्टिंग फ़ॉलबैक हो सकता है.

    MediaBrowser में फ़िट होने के लिए ProgramSelector को चालू करने के लिए- या MediaSession-आधारित समाधान, इसे सीरियल के लिए यूआरआई स्कीमा तय करें. स्कीमा यह है इस तरह परिभाषित किया गया है:

    broadcastradio://program/<primary ID type>/<primary ID>?
    <secondary ID type>=<secondary ID>&<secondary ID type>=<secondary ID>

    इस उदाहरण में, शुरुआती आइडेंटिफ़ायर वाला हिस्सा (सवाल के निशान (?) के बाद) है यह ज़रूरी नहीं है. इसे हटाया जा सकता है, ताकि mediaId के तौर पर इस्तेमाल करने के लिए एक स्थायी आइडेंटिफ़ायर दिया जा सके. उदाहरण के लिए:

    • 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 का अधिकार हिस्सा (यानी होस्ट) इसके लिए कुछ जगह उपलब्ध कराता है स्कीम एक्सटेंशन को लागू किया जा सकता है. आइडेंटिफ़ायर टाइप स्ट्रिंग की जानकारी सटीक होती है जैसे कि IdentifierType की HAL 2.x परिभाषा में उनका नाम और वैल्यू फ़ॉर्मैट दशमलव या हेक्साडेसिमल (0x प्रीफ़िक्स के साथ) संख्या होता है.

    वेंडर के सभी आइडेंटिफ़ायर, VENDOR_ की मदद से दिखाए जाते हैं उपसर्ग. उदाहरण के लिए, VENDOR_START के लिए VENDOR_0 और VENDOR_START प्लस 1 के लिए VENDOR_1. ऐसे यूआरआई खास तौर पर इनके लिए होते हैं वह रेडियो हार्डवेयर जिस पर उन्हें जनरेट किया गया था और जिसे एक डिवाइस के बीच ट्रांसफ़र नहीं किया जा सकता को अलग-अलग OEM ने बनाया है.

    ये यूआरआई, टॉप लेवल रेडियो में हर MediaItem को असाइन किए जाने चाहिए फ़ोल्डर. इसके अलावा, Mediaसेशन को playFromMediaId दोनों के साथ काम करना चाहिए और playFromUri. हालांकि, यूआरआई मुख्य रूप से रेडियो के लिए है मेटाडेटा निकालने की सुविधा (जैसे कि एफ़एम फ़्रीक्वेंसी) और स्थायी मेमोरी. कोई नहीं इस बात की गारंटी देता है कि यूआरआई सभी मीडिया आइटम के लिए उपलब्ध होगा (उदाहरण के लिए, आईडी प्रकार अभी तक फ़्रेमवर्क के साथ काम नहीं करता). दूसरी ओर, मीडिया आईडी हमेशा काम करता है. यह सुझाव नहीं दिया जाता कि क्लाइंट वर्तमान MediaBrowser सत्र. इसके बजाय, playFromMediaId का इस्तेमाल करें. कुल मिलाकर, सेवा देने वाले ऐप्लिकेशन के लिए ज़रूरी नहीं है. साथ ही, मौजूद न होने वाले यूआरआई, सही मामलों के लिए रिज़र्व हैं.

    शुरुआती डिज़ाइन में, :// क्रम के बजाय एक कोलन का इस्तेमाल किया गया है स्कीम वाले हिस्से के बाद. हालांकि, पूर्व मीडिया का इस्तेमाल करने वाले बिलकुल हैरारकी वाले यूआरआई रेफ़रंस के लिए, android.net.Uri.

    अन्य सोर्स टाइप

    अन्य ऑडियो सोर्स भी इसी तरह मैनेज किए जा सकते हैं. उदाहरण के लिए, सहायक इनपुट और ऑडियो सीडी प्लेयर.

    कोई एक ऐप्लिकेशन कई तरह के सोर्स दिखा सकता है. ऐसे मामलों में, हमारा सुझाव है कि आप शामिल हैं. यहां तक कि दिखाए गए कई सोर्स/MediaBrowserServices के सेट-अप के दौरान भी, हमारा सुझाव दिया जाता है कि एक मीडिया सेशन में है.

    ऑडियो सीडी

    ऑडियो सीडी की तरह, जिसमें ऐसी डिस्क दिखाने वाला ऐप्लिकेशन ब्राउज़ करने लायक किसी एक एंट्री (या ज़्यादा, अगर सिस्टम में सीडी चेंजर), जिसमें किसी दिए गए सीडी के सभी ट्रैक शामिल होंगे. अगर सिस्टम को प्रत्येक सीडी में मौजूद ट्रैक के बारे में जानकारी नहीं होती (उदाहरण के लिए, जब सभी डिस्क को कार्ट्रिज में एक साथ डाला जाता है और वह उन सभी को नहीं पढ़ता है), तो पूरी डिस्क के लिए MediaItem सिर्फ़ PLAYABLE होगा, नहीं BROWSABLE और PLAYABLE. अगर किसी फ़ाइल में कोई डिस्क स्लॉट दिए जाने पर आइटम न तो PLAYABLE होगा और न ही BROWSABLE होगा (हालांकि, हर स्लॉट हमेशा ट्री में मौजूद होना चाहिए).

     ऑडियो सीडी ट्री स्ट्रक्चर
    तीसरी इमेज. ऑडियो सीडी ट्री स्ट्रक्चर.

    इन एंट्री को उसी तरीके से मार्क किया जाएगा जिससे रेडियो फ़ोल्डर ब्रॉडकास्ट होते हैं हैं; उनमें MediaDescription API में बताए गए अतिरिक्त फ़ील्ड शामिल होंगे:

    • EXTRA_CD_TRACK: ऑडियो सीडी पर हर MediaItem के लिए, 1-आधारित ट्रैक नंबर.
    • EXTRA_CD_DISK: 1-आधारित डिस्क नंबर.

    CD-Text सक्षम सिस्टम और संगत डिस्क के लिए, शीर्ष-स्तरीय MediaItem डिस्क का नाम रखें. इसी तरह, ट्रैक के लिए MediaItem में, एक ट्रैक का टाइटल डालें.

    सहायक इनपुट

    सहायक इनपुट देने वाला ऐप्लिकेशन, एक ही एंट्री (या ज़्यादा, जब कई पोर्ट मौजूद हों). संबंधित Mediasession MediaId और playFromMediaId का अनुरोध मिलने के बाद, उस सोर्स पर स्विच कर देता है.

    ऑक्स ट्री स्ट्रक्चर
    चौथी इमेज. ऑक्स ट्री स्ट्रक्चर.

    हर AUX MediaItem एंट्री में एक अतिरिक्त फ़ील्ड होगा EXTRA_AUX_PORT_NAME को पोर्ट के गैर-स्थानीय जगह के नाम पर सेट किया गया "AUX" के बिना वाक्यांश. उदाहरण के लिए, "AUX 1" "1", "AUX पर सेट हो जाएगा आगे" "आगे" से और "AUX" खाली स्ट्रिंग डालें. अंग्रेज़ी के अलावा अन्य भाषाओं में, टैग उसी अंग्रेज़ी स्ट्रिंग में रहेगा. इसके लिए बहुत कम संभावना है EXTRA_BCRADIO_BAND_NAME_EN, ये वैल्यू OEM ने तय की हैं एक पहले से तय सूची तक सीमित.

    अगर हार्डवेयर, ऑक्स पोर्ट से कनेक्ट किए गए डिवाइसों का पता लगा पाता है, तो हार्डवेयर को सिर्फ़ इनपुट के कनेक्ट होने पर, MediaItem को PLAYABLE के तौर पर सबमिट करें. हार्डवेयर को अगर इससे कोई भी कनेक्ट नहीं था, तो भी गिना जाएगा (PLAYABLE नहीं) पोर्ट. अगर हार्डवेयर में ऐसी कोई क्षमता नहीं है, तो MediaItem को हमेशा PLAYABLE.

    अतिरिक्त फ़ील्ड

    इन फ़ील्ड को तय करें:

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

    क्लाइंट को उन एलिमेंट के लिए टॉप-लेवल के MediaItem की समीक्षा करनी होगी जिनमें EXTRA_CD_DISK या EXTRA_AUX_PORT_NAME अतिरिक्त फ़ील्ड सेट.

    ज़्यादा जानकारी वाले उदाहरण

    नीचे दिए गए उदाहरण उन सोर्स टाइप के लिए MediaBrowser ट्री स्ट्रक्चर के बारे में बताते हैं जो का हिस्सा है.

    ब्रॉडकास्ट रेडियो MediaBrowserService (हैंडल ACTION_PLAY_BROADCASTRADIO):

    • स्टेशन (ब्राउज़ किए जा सकने वाले)EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_PROGRAMS
      • BBC One (चलाने लायक) यूआरआई: broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=90500 अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
      • ABC 88.1 (गेम खेलने देने वाला) यूआरआई: broadcastradio://program/RDS_PI/5678?AMFM_FREQUENCY=88100 अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
      • ABC 88.1 HD1 (चलाने लायक) यूआरआई: broadcastradio://program/HD_STATION_ID_EXT/158241DEADBEEF?AMFM_FREQUENCY=88100&RDS_PI=5678 अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
      • ABC 88.1 HD2 (चलाने लायक) यूआरआई: broadcastradio://program/HD_STATION_ID_EXT/158242DEADBEFE अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
      • 90.5 FM (चलाने लायक) - आरडीएसयूआई के बिना एफ़एम: broadcastradio://program/AMFM_FREQUENCY/90500 अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
      • 620 AM (गेम खेलने देने वाला) यूआरआई: broadcastradio://program/AMFM_FREQUENCY/620 अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
      • BBC One (चलाने लायक) यूआरआई: broadcastradio://program/DAB_SID_EXT/1E24102?RDS_PI=1234
    • पसंदीदा (ब्राउज़ किया जा सकने वाला, चलाया जा सकने वाला)EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_FAVORITES
      • BBC One (चलाने लायक) यूआरआई: broadcastradio://program/RDS_PI/1234?AMFM_FREQUENCY=101300
      • बीबीसी टू (चलाने लायक नहीं) यूआरआई: broadcastradio://program/RDS_PI/1300?AMFM_FREQUENCY=102100
    • AM (ब्राउज़ करने लायक, चलाया जा सकने वाला): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="AM" अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
      • 530 AM (गेम खेलने देने वाला) यूआरआई: broadcastradio://program/AMFM_FREQUENCY/530
      • 540 AM (चलाने लायक) यूआरआई: broadcastradio://program/AMFM_FREQUENCY/540
      • 550 AM (चलाने लायक) यूआरआई: broadcastradio://program/AMFM_FREQUENCY/550
    • FM (ब्राउज़ किया जा सकने वाला, चलाया जा सकने वाला): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="FM" अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
      • 87.7 FM (चलाने लायक) यूआरआई: broadcastradio://program/AMFM_FREQUENCY/87700
      • 87.9 FM (चलाने लायक) यूआरआई: broadcastradio://program/AMFM_FREQUENCY/87900
      • 88.1 FM (चलाने लायक) यूआरआई: broadcastradio://program/AMFM_FREQUENCY/88100
    • डीएबी (चलाने लायक): EXTRA_BCRADIO_FOLDER_TYPE=BCRADIO_FOLDER_TYPE_BANDEXTRA_BCRADIO_BAND_NAME_EN="DAB"

    ऑडियो CD MediaBrowserService (हैंडल ACTION_PLAY_AUDIOCD):

    • डिस्क 1 (चलाने लायक) EXTRA_CD_DISK=1
    • डिस्क 2 (ब्राउज़ करने योग्य, चलाने योग्य) EXTRA_CD_DISK=2
      • ट्रैक 1 (चलाया जा सकने वाला) EXTRA_CD_TRACK=1
      • ट्रैक 2 (चलाया जा सकने वाला) EXTRA_CD_TRACK=2
    • मेरी संगीत सीडी (ब्राउज़ करने लायक, चलाने लायक) EXTRA_CD_DISK=3
      • ऑल बाय बायसे (चलाने लायक) EXTRA_CD_TRACK=1
      • साइज़ बदलें, साइज़ में बदलाव करें (चलाने लायक) EXTRA_CD_TRACK=2
    • खाली स्लॉट 4 (चलाने लायक नहीं) EXTRA_CD_DISK=4

    AUX MediaBrowserService (हैंडल ACTION_PLAY_AUX):

    • ऑक्स फ़्रंट (चलाया जा सकने वाला) EXTRA_AUX_PORT_NAME="front"
    • AUX रीयर (चलाने लायक) EXTRA_AUX_PORT_NAME="rear"