Google Assistant की मदद से, बोलकर निर्देश दिए जा सकते हैं. इससे कई डिवाइसों को कंट्रोल किया जा सकता है, जैसे कि Google Home, आपका फ़ोन वगैरह. इसमें पहले से मौजूद मीडिया के निर्देशों को समझ पाते हैं ("बियॉन्से के कुछ चलाओ") और उनकी मदद करते हैं मीडिया कंट्रोल (जैसे कि रोकें, स्किप करें, फ़ास्ट फ़ॉरवर्ड करें, थंब्स अप).
Assistant मीडिया की मदद से, Android मीडिया ऐप्लिकेशन से बातचीत करती है सेशन के बारे में बात करते हैं. यह इन चीज़ों का इस्तेमाल कर सकता है इंटेंट या सेवाओं को अपना ऐप्लिकेशन लॉन्च करें और वीडियो चलाना शुरू करें. सबसे अच्छे नतीजे पाने के लिए, आपके ऐप्लिकेशन को यह करना चाहिए इस पेज पर बताई गई सभी सुविधाओं को लागू करना चाहिए.
मीडिया सेशन का इस्तेमाल करना
हर ऑडियो और वीडियो ऐप्लिकेशन के लिए यह ज़रूरी है कि मीडिया सेशन ताकि Assistant काम कर सके प्लेबैक शुरू होने के बाद ट्रांसपोर्ट कंट्रोल का इस्तेमाल करें.
ध्यान दें कि भले ही Assistant सिर्फ़ इस सेक्शन में बताई गई कार्रवाइयों का इस्तेमाल करती हो, लेकिन
सबसे सही तरीका यह है कि तैयारी और वीडियो चलाने के सभी एपीआई लागू किए जाएं, ताकि यह पक्का किया जा सके कि
अन्य ऐप्लिकेशन के साथ काम करता है या नहीं. ऐसी किसी भी कार्रवाई के लिए जिसे आपने अनुमति नहीं दी है,
मीडिया सत्र कॉलबैक
ERROR_CODE_NOT_SUPPORTED
.
मीडिया और ट्रांसपोर्ट कंट्रोल को चालू करने के लिए, अपने ऐप्लिकेशन के
MediaSession
ऑब्जेक्ट:
Kotlin
session.setFlags( MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS )
Java
session.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
आपके ऐप्लिकेशन के मीडिया सेशन को उन कार्रवाइयों का एलान करना होगा जिन पर यह काम करता है. साथ ही,
संबंधित मीडिया सेशन कॉलबैक. बताएं कि कौनसी कार्रवाइयां की जा सकती हैं
setActions()
.
कॉन्टेंट बनाने यूनिवर्सल Android म्यूज़िक प्लेयर मीडिया सेशन सेट अप करने का एक अच्छा उदाहरण यह है कि सैंपल प्रोजेक्ट भी दिया जा सकता है.
प्लेबैक कार्रवाइयां
किसी सेवा पर वीडियो चलाने के लिए, मीडिया सेशन में ये PLAY
कार्रवाइयां और उनके कॉलबैक होने चाहिए:
कार्रवाई | कॉलबैक |
---|---|
ACTION_PLAY |
onPlay() |
ACTION_PLAY_FROM_SEARCH |
onPlayFromSearch() |
ACTION_PLAY_FROM_URI (*) |
onPlayFromUri() |
आपके सेशन में ये PREPARE
कार्रवाइयां और उनके कॉलबैक भी लागू होने चाहिए:
कार्रवाई | कॉलबैक |
---|---|
ACTION_PREPARE |
onPrepare() |
ACTION_PREPARE_FROM_SEARCH |
onPrepareFromSearch() |
ACTION_PREPARE_FROM_URI (*) |
onPrepareFromUri() |
तैयारी करने वाले एपीआई लागू करने से, बोले गए निर्देश के बाद वीडियो चलने में लगने वाला समय बचता है कम किया जा सकता है. वे मीडिया ऐप्लिकेशन जो वीडियो चलाने में लगने वाला समय कम करना चाहते हैं, वे कॉन्टेंट को कैश मेमोरी में सेव करने और मीडिया प्लेबैक तैयार करने में ज़्यादा समय लग सकता है.
खोज क्वेरी को पार्स करें
जब कोई उपयोगकर्ता किसी खास मीडिया आइटम को खोजता है, जैसे कि "जैज़ चलाओ
[your app name]” या “[song title] सुनो”,
onPrepareFromSearch()
या
onPlayFromSearch()
कॉलबैक वाले तरीके को क्वेरी पैरामीटर और एक्स्ट्रा बंडल मिलता है.
आपके ऐप्लिकेशन को वॉइस सर्च क्वेरी को पार्स करना चाहिए और इन निर्देशों का पालन करके वीडियो चलाना शुरू करना चाहिए चरण:
- वॉइस सर्च से मिले एक्स्ट्रा बंडल और सर्च क्वेरी स्ट्रिंग का इस्तेमाल करें नतीजों को फ़िल्टर करने के लिए.
- इन नतीजों के आधार पर वीडियो चलाने की सूची बनाएं.
- नतीजों में से सबसे काम का मीडिया आइटम चलाएं.
onPlayFromSearch()
यह तरीका, आवाज़ से मिलने वाली ज़्यादा जानकारी के साथ एक अतिरिक्त पैरामीटर लेता है
खोजें. इन अतिरिक्त सुविधाओं की मदद से, अपने ऐप्लिकेशन में वीडियो चलाने के लिए ऑडियो कॉन्टेंट ढूंढा जा सकता है.
अगर खोज के नतीजों से यह डेटा नहीं मिल पाता है, तो
रॉ खोज क्वेरी को पार्स करने और इसके आधार पर सही ट्रैक चलाने के लिए
क्वेरी.
Android Automotive OS और Android Auto के लिए, ये अतिरिक्त सुविधाएं काम करती हैं:
नीचे दिया गया कोड स्निपेट, onPlayFromSearch()
को बदलने का तरीका बताता है
तरीका, आपके MediaSession.Callback
में
वॉइस सर्च क्वेरी को पार्स करने और प्लेबैक शुरू करने के लिए लागू करें:
Kotlin
override fun onPlayFromSearch(query: String?, extras: Bundle?) { if (query.isNullOrEmpty()) { // The user provided generic string e.g. 'Play music' // Build appropriate playlist queue } else { // Build a queue based on songs that match "query" or "extras" param val mediaFocus: String? = extras?.getString(MediaStore.EXTRA_MEDIA_FOCUS) if (mediaFocus == MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) { isArtistFocus = true artist = extras.getString(MediaStore.EXTRA_MEDIA_ARTIST) } else if (mediaFocus == MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) { isAlbumFocus = true album = extras.getString(MediaStore.EXTRA_MEDIA_ALBUM) } // Implement additional "extras" param filtering } // Implement your logic to retrieve the queue var result: String? = when { isArtistFocus -> artist?.also { searchMusicByArtist(it) } isAlbumFocus -> album?.also { searchMusicByAlbum(it) } else -> null } result = result ?: run { // No focus found, search by query for song title query?.also { searchMusicBySongTitle(it) } } if (result?.isNotEmpty() == true) { // Immediately start playing from the beginning of the search results // Implement your logic to start playing music playMusic(result) } else { // Handle no queue found. Stop playing if the app // is currently playing a song } }
Java
@Override public void onPlayFromSearch(String query, Bundle extras) { if (TextUtils.isEmpty(query)) { // The user provided generic string e.g. 'Play music' // Build appropriate playlist queue } else { // Build a queue based on songs that match "query" or "extras" param String mediaFocus = extras.getString(MediaStore.EXTRA_MEDIA_FOCUS); if (TextUtils.equals(mediaFocus, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE)) { isArtistFocus = true; artist = extras.getString(MediaStore.EXTRA_MEDIA_ARTIST); } else if (TextUtils.equals(mediaFocus, MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE)) { isAlbumFocus = true; album = extras.getString(MediaStore.EXTRA_MEDIA_ALBUM); } // Implement additional "extras" param filtering } // Implement your logic to retrieve the queue if (isArtistFocus) { result = searchMusicByArtist(artist); } else if (isAlbumFocus) { result = searchMusicByAlbum(album); } if (result == null) { // No focus found, search by query for song title result = searchMusicBySongTitle(query); } if (result != null && !result.isEmpty()) { // Immediately start playing from the beginning of the search results // Implement your logic to start playing music playMusic(result); } else { // Handle no queue found. Stop playing if the app // is currently playing a song } }
ऑडियो चलाने के लिए, वॉइस सर्च की सुविधा को इस्तेमाल करने का तरीका जानने के लिए, देखने के लिए, यूनिवर्सल Android म्यूज़िक प्लेयर देखें सैंपल.
खाली क्वेरी हैंडल करना
अगर onPrepare()
, onPlay()
, onPrepareFromSearch()
या onPlayFromSearch()
बिना किसी खोज क्वेरी के कॉल किए जाते हैं, तो आपके मीडिया ऐप्लिकेशन को "वर्तमान" चलाना चाहिए
मीडिया. अगर कोई मौजूदा मीडिया नहीं है, तो ऐप्लिकेशन को कुछ चलाने की कोशिश करनी चाहिए, जैसे कि
हाल ही की प्लेलिस्ट में से किसी गाने या किसी भी सूची में शामिल करें. Assistant,
ये एपीआई तब उपलब्ध होते हैं, जब कोई उपयोगकर्ता “[your app name] पर संगीत चलाओ” कहता है
अतिरिक्त जानकारी.
जब कोई उपयोगकर्ता “[आपके ऐप्लिकेशन का नाम] पर संगीत चलाओ” कहता है, तो Android Automotive OS या
Android Auto आपके ऐप्लिकेशन के onPlayFromSearch()
को कॉल करके, आपका ऐप्लिकेशन लॉन्च करने और ऑडियो चलाने की कोशिश करता है
तरीका. हालांकि, उपयोगकर्ता ने मीडिया आइटम का नाम नहीं बताया, इसलिए onPlayFromSearch()
तरीके को खाली क्वेरी पैरामीटर मिलता है. इन मामलों में, आपके ऐप्लिकेशन को
तुरंत कोई ऑडियो चलाकर जवाब दे सकते हैं, जैसे कि सबसे हाल ही का कोई गाना
प्लेलिस्ट या किसी भी क्रम में चुनी गई सूची.
बोलकर फ़ोन का इस्तेमाल करने की सुविधा के लिए, लेगसी ऐप्लिकेशन का एलान करना
ज़्यादातर मामलों में, ऊपर बताई गई प्लेबैक कार्रवाइयों को मैनेज करने से, आपके ऐप्लिकेशन को सभी की ज़रूरत होती है. हालांकि, कुछ सिस्टम के लिए ज़रूरी है कि आपका ऐप्लिकेशन खोज के लिए इंटेंट फ़िल्टर शामिल हो. आपको इस इंटेंट के लिए काम करने का एलान करना चाहिए फ़िल्टर का इस्तेमाल करें.
किसी फ़ोन ऐप्लिकेशन के लिए मेनिफ़ेस्ट फ़ाइल में यह कोड शामिल करें:
<activity>
<intent-filter>
<action android:name=
"android.media.action.MEDIA_PLAY_FROM_SEARCH" />
<category android:name=
"android.intent.category.DEFAULT" />
</intent-filter>
</activity>
ट्रांसपोर्ट कंट्रोल
आपके ऐप्लिकेशन का मीडिया सेशन चालू होने के बाद, Assistant बोलकर निर्देश दे सकती है मीडिया के मेटाडेटा को अपडेट करने और प्लेबैक कंट्रोल करने के लिए. इसे काम करने के लिए, आपके कोड को नीचे दी गई कार्रवाइयों को चालू करना चाहिए और संबंधित कार्रवाइयों को लागू करना चाहिए कॉलबैक:
कार्रवाई | कॉलबैक | ब्यौरा |
---|---|---|
ACTION_SKIP_TO_NEXT |
onSkipToNext() |
अगला वीडियो |
ACTION_SKIP_TO_PREVIOUS |
onSkipToPrevious() |
पिछला गाना चलाएं |
ACTION_PAUSE, ACTION_PLAY_PAUSE |
onPause() |
रोकें |
ACTION_STOP |
onStop() |
रोकें |
ACTION_PLAY |
onPlay() |
फिर से शुरू करें |
ACTION_SEEK_TO |
onSeekTo() |
30 सेकंड पीछे जाएं |
ACTION_SET_RATING |
onSetRating(android.support.v4.media.RatingCompat) |
पसंद/नापसंद. |
ACTION_SET_CAPTIONING_ENABLED |
onSetCaptioningEnabled(boolean) |
कैप्शन की सुविधा चालू या बंद करें. |
कृपया ध्यान दें:
- आगे-पीछे करने के निर्देश काम करें, इसके लिए
PlaybackState
कोstate, position, playback speed, and update time
के साथ अप-टू-डेट होना चाहिए. स्थिति बदलने पर, ऐप्लिकेशन कोsetPlaybackState()
को कॉल करना होगा. - मीडिया ऐप्लिकेशन को मीडिया सेशन का मेटाडेटा भी अप-टू-डेट रखना चाहिए. इससे "कौनसा गाना चल रहा है?" जैसे सवालों के जवाब मिल सकते हैं ज़रूरी फ़ील्ड (जैसे कि ट्रैक का टाइटल, कलाकार, और नाम) में बदलाव होने पर, ऐप्लिकेशन को
setMetadata()
को कॉल करना होगा. MediaSession.setRatingType()
को इस तरह की रेटिंग सेट करनी चाहिए कि ऐप्लिकेशन पर काम करती हो. साथ ही, ऐप्लिकेशन कोonSetRating()
लागू करनी होगी. अगर ऐप्लिकेशन में रेटिंग की सुविधा नहीं है, तो रेटिंग टाइप कोRATING_NONE
पर सेट किया जाना चाहिए.
बोलकर फ़ोन का इस्तेमाल करने की सुविधा, कॉन्टेंट के टाइप के हिसाब से अलग-अलग हो सकती है.
कॉन्टेंट किस तरह का है | आवश्यक कार्रवाइयां |
---|---|
संगीत |
यह सुविधा देना ज़रूरी है: चलाएं, रोकें, बंद करें, अगले वीडियो पर जाएं, और पिछले पेज पर जाएं इसके लिए सहायता का सुझाव दें: ऐसा करने की कोशिश करें |
पॉडकास्ट |
सहायता देना ज़रूरी है: चलाएं, रोकें, बंद करें, और खोजें इसके लिए सहायता का सुझाव दें: अगले पेज पर जाएं और पिछले पेज पर जाएं |
ऑडियो बुक | सहायता देना ज़रूरी है: चलाएं, रोकें, बंद करें, और खोजें |
रेडियो | मदद करना ज़रूरी है: चलाएं, रोकें, और बंद करें |
समाचार | यह सुविधा देना ज़रूरी है: चलाएं, रोकें, बंद करें, अगले वीडियो पर जाएं, और पिछले पेज पर जाएं |
वीडियो |
इनकी मदद करना: चलाना, रोकना, बंद करना, आगे बढ़ाना, पीछे ले जाना, और फ़ास्ट फ़ॉरवर्ड करना इसके लिए सहायता का सुझाव ज़रूर दें: 'अगले पर जाएं' और 'पीछे जाएं' पर जाएं |
आपको अपना प्रॉडक्ट ऑफ़र करने के लिए, ऊपर बताई गई सभी कार्रवाइयों को सपोर्ट करना होगा की अनुमति है, लेकिन फिर भी अन्य कार्रवाइयों के लिए ग्रेसफ़ुल तरीके से जवाब देते हैं. उदाहरण के लिए, अगर सिर्फ़ प्रीमियम उपयोगकर्ताओं के पास पिछले आइटम पर वापस जाने की सुविधा होती है. अगर फ़्री टीयर का कोई उपयोगकर्ता, Assistant को पिछले आइटम पर वापस जाने के लिए कहता है, तो गड़बड़ी का मैसेज दिखेगा. ज़्यादा जानकारी के लिए गड़बड़ियों को मैनेज करने वाला सेक्शन देखें.
इसे आज़माने के लिए, वॉइस क्वेरी के सैंपल
नीचे दी गई टेबल में कुछ सैंपल क्वेरी के बारे में बताया गया है. इनका इस्तेमाल ऐसी क्वेरी के लिए करना चाहिए जिन्हें आपको लागू करने की जांच करें:
Mediasession कॉलबैक | “Ok Google” वाक्यांश का इस्तेमाल करें | |
---|---|---|
onPlay() |
"चलाओ." “फिर शुरू करो।” |
|
onPlayFromSearch()
onPlayFromUri() |
संगीत |
“(app name) पर संगीत या गाने चलाओ.” यह एक खाली क्वेरी है. “(app name) पर (गाना | कलाकार | एल्बम | शैली | प्लेलिस्ट) चलाएं.” |
रेडियो | “(app name) पर (frequency | Station) चलाओ.” | |
ऑडियो बुक |
“(app name) पर मेरी ऑडियो बुक पढ़ो.” “(app name) पर (ऑडियो बुक) पढ़ें.” |
|
पॉडकास्ट | “(app name) पर (podcast) चलाओ.” | |
onPause() |
"रोको।" | |
onStop() |
"बंद करो।" | |
onSkipToNext() |
“अगला (गाना | एपिसोड | ट्रैक).” | |
onSkipToPrevious() |
“पिछला (गाना | एपिसोड | ट्रैक).” | |
onSeekTo() |
"रीस्टार्ट करें." “## सेकंड आगे बढ़ें.” “## मिनट पीछे जाएं.” |
|
लागू नहीं (अपना डेटा सेव रखें
MediaMetadata
अपडेट किया गया) |
“क्या चल रहा है?” |
गड़बड़ियां
Assistant, मीडिया सेशन में होने वाली गड़बड़ियों को हैंडल करती है और उन्हें रिपोर्ट करती है
उन्हें उपयोगकर्ताओं के लिए उपलब्ध कराया जाता है. पक्का करें कि आपके मीडिया सेशन में, ट्रांसपोर्ट का स्टेटस अपडेट हो और
गड़बड़ी कोड के साथ उसके PlaybackState
में सही तरीके से शामिल किया गया है, जैसा कि किसी गड़बड़ी को ठीक करने के लिए
मीडिया सेशन. Assistant
इसके ज़रिए लौटाए गए सभी गड़बड़ी कोड पहचानता है
getErrorCode()
.
आम तौर पर, हैंडल नहीं किए जाने वाले मामले
यहां गड़बड़ी के उन मामलों के कुछ उदाहरण दिए गए हैं जिन्हें आपको ठीक से ठीक करना होगा सही ढंग से:
- उपयोगकर्ता को साइन इन करना होगा
PlaybackState
गड़बड़ी के कोड कोERROR_CODE_AUTHENTICATION_EXPIRED
पर सेट करें.PlaybackState
गड़बड़ी का मैसेज सेट करें.- अगर प्लेबैक के लिए ज़रूरी हो, तो
PlaybackState
की स्थिति कोSTATE_ERROR
पर सेट करें, अगर ऐसा नहीं है, तोPlaybackState
को ऐसे ही रहने दें.
- उपयोगकर्ता ने ऐसी कार्रवाई का अनुरोध किया है जो उपलब्ध नहीं है
PlaybackState
गड़बड़ी कोड को सही तरीके से सेट करें. उदाहरण के लिए,PlaybackState
सेERROR_CODE_NOT_SUPPORTED
अगर कार्रवाई काम नहीं करती है याERROR_CODE_PREMIUM_ACCOUNT_REQUIRED
अगर उस कार्रवाई से साइन-इन किया जा सकता है.PlaybackState
गड़बड़ी का मैसेज सेट करें.PlaybackState
को वैसे ही रहने दें.
- उपयोगकर्ता का अनुरोध किया गया कॉन्टेंट, ऐप्लिकेशन में उपलब्ध नहीं है
PlaybackState
गड़बड़ी कोड को सही तरीके से सेट करें. उदाहरण के लिए,ERROR_CODE_NOT_AVAILABLE_IN_REGION
.PlaybackState
गड़बड़ी का मैसेज सेट करें.- वीडियो देखने में रुकावट डालने के लिए,
PlaybackSate
स्थिति कोSTATE_ERROR
पर सेट करें. अगर ऐसा नहीं है, तोPlaybackState
को पहले जैसा ही रहने दें.
- उपयोगकर्ता ऐसे कॉन्टेंट का अनुरोध करता है जिसका एग्ज़ैक्ट मैच नहीं मिलता. उदाहरण के लिए,
फ़्री-टियर उपयोगकर्ता, जिससे सिर्फ़ प्रीमियम लेवल के उपयोगकर्ताओं के लिए उपलब्ध कॉन्टेंट के बारे में पूछना हो.
- हमारा सुझाव है कि आप कोई गड़बड़ी न दिखाएं. इसके बजाय, उन्हें पहले उससे मिलता-जुलता कॉन्टेंट ढूँढना. Assistant सबसे ज़्यादा बोलने पर हैंडल करेगी प्लेबैक शुरू होने से पहले आवाज़ से सही संकेत मिलना ज़रूरी है.
इंटेंट के साथ वीडियो चलाएं
Assistant कोई ऑडियो या वीडियो ऐप्लिकेशन लॉन्च कर सकती है और डीप लिंक के साथ इंटेंट करें.
इंटेंट और उसका डीप लिंक, अलग-अलग सोर्स से मिल सकता है:
- जब Assistant तो यह Google Search का इस्तेमाल करके, ऐसी मार्कअप की गई कॉन्टेंट को वापस पा सकता है लिंक के साथ देखने की कार्रवाई दिखाता है.
- जब Assistant कोई टीवी ऐप्लिकेशन शुरू करती है, तो आपके ऐप्लिकेशन में
टीवी खोज सेवा देने वाली कंपनी
का इस्तेमाल करें. Assistant इन्हें एक क्वेरी भेजती है
तो कॉन्टेंट देने वाले को डीप लिंक के लिए यूआरआई वाले इंटेंट के बारे में बताना चाहिए और
वैकल्पिक कार्रवाई.
अगर क्वेरी से इंटेंट में कोई कार्रवाई मिलती है, तो
Assistant उस कार्रवाई और यूआरआई को वापस आपके ऐप्लिकेशन पर भेज देती है.
अगर सेवा देने वाली कंपनी ने इस बारे में नहीं बताया है, तो
कोई कार्रवाई करने पर, Assistant, इंटेंट में
ACTION_VIEW
जोड़ देगी.
Assistant, true
वैल्यू के साथ अतिरिक्त EXTRA_START_PLAYBACK
जोड़ देती है
इंटेंट पर भेजना होगा. ऐप्लिकेशन तब वीडियो चलना शुरू करेगा, जब
EXTRA_START_PLAYBACK
के साथ एक इंटेंट मिलता है.
ऐक्टिव होने पर इंटेंट हैंडल करना
जब आपका ऐप्लिकेशन चालू हो, तब उपयोगकर्ता Assistant से कुछ चलाने के लिए कह सकते हैं पिछले अनुरोध का कॉन्टेंट. इसका मतलब है कि आपके ऐप्लिकेशन को नए इंटेंट मिल सकते हैं, जब इसकी प्लेबैक गतिविधि पहले से लॉन्च हो और सक्रिय हो, तब प्लेबैक प्रारंभ करें.
डीप लिंक वाले इंटेंट के साथ काम करने वाली गतिविधियों को बदलना चाहिए
onNewIntent()
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
का इस्तेमाल किया जा सकता है.
वीडियो चलाना शुरू करते समय, Assistant और वीडियो जोड़ सकती है
फ़्लैग
इंटेंट पर भेजना होगा. विशेष रूप से, यह
FLAG_ACTIVITY_CLEAR_TOP
या
FLAG_ACTIVITY_NEW_TASK
या दोनों. हालांकि, आपका कोड
को इन फ़्लैग को हैंडल करने की ज़रूरत नहीं होती, तो Android सिस्टम उनका जवाब देता है.
नए यूआरआई के साथ वीडियो चलाने का दूसरा अनुरोध मिलने पर, आपके ऐप्लिकेशन के काम करने के तरीके पर इसका असर पड़ सकता है
जब पिछला यूआरआई अब भी चल रहा हो. इस बात की जांच करना बेहतर होगा कि इस मामले में आपका ऐप्लिकेशन कैसे काम करता है. adb
निर्देश का इस्तेमाल किया जा सकता है
लाइन टूल की मदद से स्थिति को सिम्युलेट करें (कॉन्सटेंट 0x14000000
, बूलियन बिट के अनुसार या दो फ़्लैग का OR है):
adb shell 'am start -a android.intent.action.VIEW --ez android.intent.extra.START_PLAYBACK true -d "<first_uri>"' -f 0x14000000
adb shell 'am start -a android.intent.action.VIEW --ez android.intent.extra.START_PLAYBACK true -d "<second_uri>"' -f 0x14000000
किसी सेवा से वीडियो चलाना
अगर आपके ऐप्लिकेशन में
media browser service
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
की मदद से कनेक्ट करने की अनुमति दी जाती है.
Assistant, सेवा देने वाली कंपनी से बातचीत करके ऐप्लिकेशन को चालू कर सकती है
media session
.
मीडिया ब्राउज़र सेवा को कभी भी कोई ऐक्टिविटी लॉन्च नहीं करनी चाहिए.
आपने जो PendingIntent
तय किया है उसके आधार पर Assistant आपकी गतिविधि लॉन्च करेगी
setsessionActivity() के साथ.
जब आप अपने मीडिया ब्राउज़र सेवा को शुरू करें. YouTube पर चलने वाली वीडियो चलाने की कार्रवाइयां सेट करना न भूलें हर समय, लागू करना भी शामिल है. Assistant को आपके मीडिया से उम्मीद है ऐप, Assistant के पहली बार वीडियो भेजने से पहले, वीडियो चलाने की कार्रवाइयाँ सेट कर सकता है आदेश.
किसी सेवा से शुरुआत करने के लिए, Assistant मीडिया ब्राउज़र क्लाइंट एपीआई लागू करती है. यह TransportControls कॉल को ऐसे ट्रिगर करता है जो आपके डिवाइस पर PLAY कार्रवाई कॉलबैक ट्रिगर करते हैं ऐप्लिकेशन के मीडिया सेशन में हिस्सा लेता है.
नीचे दिए गए डायग्राम में, Assistant और संबंधित मीडिया सेशन कॉलबैक. (तैयार कॉलबैक सिर्फ़ भेजे जाते हैं अगर आपके ऐप्लिकेशन में यह सुविधा काम करती है.) सभी कॉल एसिंक्रोनस होते हैं. Assistant ये काम नहीं करती अपने ऐप्स से किसी भी जवाब की इंतज़ार करें.
जब कोई उपयोगकर्ता चलाने के लिए बोला गया निर्देश देता है, तो Assistant एक छोटी सी सूचना के साथ जवाब देती है. सूचना पूरी होते ही Assistant, 'Play कार्रवाई' चालू कर देती है. यह सुविधा वीडियो चलाने की किसी खास स्थिति का इंतज़ार नहीं करती.
अगर आपके ऐप्लिकेशन में ACTION_PREPARE_*
कार्रवाइयाँ काम करती हैं, तो Assistant सूचना शुरू करने से पहले, PREPARE
को कॉल करती है.
MediaBrowserService से कनेक्ट करना
अपना ऐप्लिकेशन चालू करने के लिए किसी सेवा का इस्तेमाल करने के लिए, Assistant यह ज़रूरी है कि वह ऐप्लिकेशन के MediaBrowserService और
अपना Mediasession.Token वापस पाएं. कनेक्शन के अनुरोधों को सेवा
onGetRoot()
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
तरीका. अनुरोधों को मैनेज करने के दो तरीके हैं:
- कनेक्शन के सभी अनुरोध स्वीकार करें
- सिर्फ़ Assistant ऐप्लिकेशन से कनेक्शन के अनुरोध स्वीकार करें
कनेक्शन के सभी अनुरोध स्वीकार करें
Assistant को आपके मीडिया सेशन में निर्देश भेजने की अनुमति देने के लिए, आपको BrowserRoot करना होगा. सबसे आसान तरीका सभी MediaBrowser ऐप्स को अपने MediaBrowserService से कनेक्ट होने की अनुमति देना है. आपको बिना शून्य वाला BrowserRoot देना होगा. यहां यूनिवर्सल म्यूज़िक प्लेयर से मिला कोड दिया गया है:
Kotlin
override fun onGetRoot( clientPackageName: String, clientUid: Int, rootHints: Bundle? ): BrowserRoot? { // To ensure you are not allowing any arbitrary app to browse your app's contents, you // need to check the origin: if (!packageValidator.isCallerAllowed(this, clientPackageName, clientUid)) { // If the request comes from an untrusted package, return an empty browser root. // If you return null, then the media browser will not be able to connect and // no further calls will be made to other media browsing methods. Log.i(TAG, "OnGetRoot: Browsing NOT ALLOWED for unknown caller. Returning empty " + "browser root so all apps can use MediaController. $clientPackageName") return MediaBrowserServiceCompat.BrowserRoot(MEDIA_ID_EMPTY_ROOT, null) } // Return browser roots for browsing... }
Java
@Override public BrowserRoot onGetRoot(@NonNull String clientPackageName, int clientUid, Bundle rootHints) { // To ensure you are not allowing any arbitrary app to browse your app's contents, you // need to check the origin: if (!packageValidator.isCallerAllowed(this, clientPackageName, clientUid)) { // If the request comes from an untrusted package, return an empty browser root. // If you return null, then the media browser will not be able to connect and // no further calls will be made to other media browsing methods. LogHelper.i(TAG, "OnGetRoot: Browsing NOT ALLOWED for unknown caller. " + "Returning empty browser root so all apps can use MediaController." + clientPackageName); return new MediaBrowserServiceCompat.BrowserRoot(MEDIA_ID_EMPTY_ROOT, null); } // Return browser roots for browsing... }
Assistant ऐप्लिकेशन का पैकेज और हस्ताक्षर स्वीकार करें
आप Assistant के पैकेज का नाम और हस्ताक्षर देखकर, साफ़ तौर पर अपनी मीडिया ब्राउज़र सेवा से कनेक्ट करने की अनुमति दे सकते हैं. आपके ऐप्लिकेशन को आपके MediaBrowserService के onGetRoot तरीके में पैकेज नाम भेजा जाएगा. Assistant को आपके मीडिया सेशन में निर्देश भेजने की अनुमति देने के लिए, आपको BrowserRoot करना होगा. कॉन्टेंट बनाने यूनिवर्सल म्यूज़िक प्लेयर सैंपल में, जाने-पहचाने पैकेज के नामों और हस्ताक्षरों की सूची होती है. नीचे उन पैकेज के नाम और हस्ताक्षर दिए गए हैं जिनका इस्तेमाल Google Assistant करती है.
<signature name="Google" package="com.google.android.googlequicksearchbox">
<key release="false">19:75:b2:f1:71:77:bc:89:a5:df:f3:1f:9e:64:a6:ca:e2:81:a5:3d:c1:d1:d5:9b:1d:14:7f:e1:c8:2a:fa:00</key>
<key release="true">f0:fd:6c:5b:41:0f:25:cb:25:c3:b5:33:46:c8:97:2f:ae:30:f8:ee:74:11:df:91:04:80:ad:6b:2d:60:db:83</key>
</signature>
<signature name="Google Assistant on Android Automotive OS" package="com.google.android.carassistant">
<key release="false">17:E2:81:11:06:2F:97:A8:60:79:7A:83:70:5B:F8:2C:7C:C0:29:35:56:6D:46:22:BC:4E:CF:EE:1B:EB:F8:15</key>
<key release="true">74:B6:FB:F7:10:E8:D9:0D:44:D3:40:12:58:89:B4:23:06:A6:2C:43:79:D0:E5:A6:62:20:E3:A6:8A:BF:90:E2</key>
</signature>