विज्ञापन के लिए ब्रेक
Android सेंडर SDK टूल की मदद से, विज्ञापन के लिए ब्रेक और साथी विज्ञापनों के लिए दिया जाता है.
ज़्यादा जानकारी के लिए, ज़्यादा जानकारी के लिए, वेब रिसीवर के लिए विज्ञापन के लिए ब्रेक की खास जानकारी 'विज्ञापन के लिए ब्रेक' के काम करने के तरीके के बारे में जानकारी.
भेजने और पाने वाले, दोनों के लिए ब्रेक तय किए जा सकते हैं. हालांकि, हमारा सुझाव है कि इन्हें वेब पाने वाले पर दी गई हो और Android TV रिसीवर को एक ही तरह से बनाए रखने के लिए अलग-अलग प्लैटफ़ॉर्म पर व्यवहार करते हैं.
Android पर, लोड करने के निर्देश में विज्ञापन के लिए ब्रेक तय करने के लिए, इसका इस्तेमाल करें
AdBreakClipInfo
और AdBreakInfo
:
val breakClip1: AdBreakClipInfo = AdBreakClipInfo.Builder("bc0") .setTitle("Clip title") .setPosterUrl("https://www.some.url") .setDuration(60000) .setWhenSkippableInMs(5000) // Set this field so that the ad is skippable .build() val breakClip2: AdBreakClipInfo = … val breakClip3: AdBreakClipInfo = … val break1: AdBreakClipInfo = AdBreakInfo.Builder(/* playbackPositionInMs= */ 10000) .setId("b0") .setBreakClipIds({"bc0","bc1","bc2"}) … .build() val mediaInfo: MediaInfo = MediaInfo.Builder() … .setAdBreaks({break1}) .setAdBreakClips({breakClip1, breakClip2, breakClip3}) .build() val mediaLoadRequestData: MediaLoadRequestData = MediaInfo.Builder() … .setMediaInfo(mediaInfo) .build() remoteMediaClient.load(mediaLoadRequestData)
AdBreakClipInfo breakClip1 = new AdBreakClipInfo.Builder("bc0") .setTitle("Clip title") .setPosterUrl("https://www.some.url") .setDuration(60000) .setWhenSkippableInMs(5000) // Set this field so that the ad is skippable .build(); AdBreakClipInfo breakClip2 = … AdBreakClipInfo breakClip3 = … AdBreakInfo break1 = new AdBreakInfo.Builder(/* playbackPositionInMs= */ 10000) .setId("b0") .setBreakClipIds({"bc0","bc1","bc2"}) … .build(); MediaInfo mediaInfo = new MediaInfo.Builder() … .setAdBreaks({break1}) .setAdBreakClips({breakClip1, breakClip2, breakClip3}) .build(); MediaLoadRequestData mediaLoadRequestData = new MediaInfo.Builder() … .setMediaInfo(mediaInfo) .build(); remoteMediaClient.load(mediaLoadRequestData);
कस्टम कार्रवाइयां जोड़ें
भेजने वाला ऐप्लिकेशन, फ़ाइल शेयर करने की अवधि आगे बढ़ा सकता है
MediaIntentReceiver
कस्टम कार्रवाइयों को हैंडल करने या इसके व्यवहार को बदलने के लिए. अगर आपने
MediaIntentReceiver
का मालिकाना हक है, तो आपको इसे मेनिफ़ेस्ट में जोड़ना होगा. साथ ही, इसकी
CastMediaOptions
में नाम. इस उदाहरण में, ऐसी कस्टम कार्रवाइयों के बारे में बताया गया है
रिमोट मीडिया प्लेबैक को टॉगल करके बदलने के लिए, मीडिया बटन और दूसरी तरह के बटन दबाएं
कार्रवाइयां.
// In AndroidManifest.xml
<receiver android:name="com.example.MyMediaIntentReceiver" />
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
// In your OptionsProvider var mediaOptions = CastMediaOptions.Builder() .setMediaIntentReceiverClassName(MyMediaIntentReceiver::class.java.name) .build() // Implementation of MyMediaIntentReceiver internal class MyMediaIntentReceiver : MediaIntentReceiver() { override fun onReceiveActionTogglePlayback(currentSession: Session) { } override fun onReceiveActionMediaButton(currentSession: Session, intent: Intent) { } override fun onReceiveOtherAction(context: Context?, action: String, intent: Intent) { } }
// In your OptionsProvider CastMediaOptions mediaOptions = new CastMediaOptions.Builder() .setMediaIntentReceiverClassName(MyMediaIntentReceiver.class.getName()) .build(); // Implementation of MyMediaIntentReceiver class MyMediaIntentReceiver extends MediaIntentReceiver { @Override protected void onReceiveActionTogglePlayback(Session currentSession) { } @Override protected void onReceiveActionMediaButton(Session currentSession, Intent intent) { } @Override protected void onReceiveOtherAction(Context context, String action, Intent intent) { } }
कोई कस्टम चैनल जोड़ें
भेजने वाले ऐप्लिकेशन को रिसीवर ऐप्लिकेशन से कनेक्ट करने के लिए, ऐप्लिकेशन को
कस्टम चैनल बनाएं. मैसेज भेजने वाला व्यक्ति, स्ट्रिंग भेजने के लिए कस्टम चैनल का इस्तेमाल कर सकता है
पाने वाले को मैसेज मिलते हैं. हर कस्टम चैनल को एक खास
नेमस्पेस और प्रीफ़िक्स urn:x-cast:
से शुरू होना चाहिए. उदाहरण के लिए,
urn:x-cast:com.example.custom
. कस्टम पैरामीटर के लिए कई कस्टम
अलग-अलग नाम स्थान वाले चैनल. पाने वाला ऐप्लिकेशन ये काम भी कर सकता है:
मैसेज भेजना और पाना
का इस्तेमाल करें.
कस्टम चैनल को
Cast.MessageReceivedCallback
इंटरफ़ेस:
class HelloWorldChannel : MessageReceivedCallback { val namespace: String get() = "urn:x-cast:com.example.custom" override fun onMessageReceived(castDevice: CastDevice, namespace: String, message: String) { Log.d(TAG, "onMessageReceived: $message") } }
class HelloWorldChannel implements Cast.MessageReceivedCallback { public String getNamespace() { return "urn:x-cast:com.example.custom"; } @Override public void onMessageReceived(CastDevice castDevice, String namespace, String message) { Log.d(TAG, "onMessageReceived: " + message); } }
भेजने वाले ऐप्लिकेशन को पाने वाले ऐप्लिकेशन से कनेक्ट करने के बाद, कस्टम चैनल ये काम कर सकता है:
का इस्तेमाल करके बनाए जा सकते हैं
setMessageReceivedCallbacks
तरीका:
try { mCastSession.setMessageReceivedCallbacks( mHelloWorldChannel.namespace, mHelloWorldChannel) } catch (e: IOException) { Log.e(TAG, "Exception while creating channel", e) }
try { mCastSession.setMessageReceivedCallbacks( mHelloWorldChannel.getNamespace(), mHelloWorldChannel); } catch (IOException e) { Log.e(TAG, "Exception while creating channel", e); }
कस्टम चैनल बन जाने के बाद, भेजने वाला व्यक्ति इसका इस्तेमाल कर सकता है:
sendMessage
पाने वाले को उस चैनल पर स्ट्रिंग मैसेज भेजने का तरीका:
private fun sendMessage(message: String) { if (mHelloWorldChannel != null) { try { mCastSession.sendMessage(mHelloWorldChannel.namespace, message) .setResultCallback { status -> if (!status.isSuccess) { Log.e(TAG, "Sending message failed") } } } catch (e: Exception) { Log.e(TAG, "Exception while sending message", e) } } }
private void sendMessage(String message) { if (mHelloWorldChannel != null) { try { mCastSession.sendMessage(mHelloWorldChannel.getNamespace(), message) .setResultCallback( status -> { if (!status.isSuccess()) { Log.e(TAG, "Sending message failed"); } }); } catch (Exception e) { Log.e(TAG, "Exception while sending message", e); } } }
वीडियो अपने-आप चलने की सुविधा के साथ काम करता है
वीडियो के नीचे अपने-आप चलाएं और एपीआई की सूची बनाना.
UX विजेट के लिए, इमेज चुनने की सेटिंग बदलें
फ़्रेमवर्क के अलग-अलग कॉम्पोनेंट (जैसे, कास्ट डायलॉग, मिनी
कंट्रोलर, और UIMediaController, अगर कॉन्फ़िगर किया गया हो, तो) आर्टवर्क दिखाएगा
को चालू या बंद कर सकते हैं. आम तौर पर, इमेज आर्टवर्क के यूआरएल
मीडिया के लिए MediaMetadata
में शामिल है, लेकिन भेजने वाले ऐप्लिकेशन में हो सकता है
यूआरएल के वैकल्पिक स्रोत की जानकारी दें.
कॉन्टेंट बनाने
ImagePicker
क्लास में दी गई इमेज की सूची से सही इमेज चुनने का तरीका बताया गया है
MediaMetadata
में, इमेज के इस्तेमाल के आधार पर, जैसे कि सूचना
थंबनेल या फ़ुल स्क्रीन बैकग्राउंड. ImagePicker
का डिफ़ॉल्ट रूप से लागू होना
हमेशा पहली इमेज चुनता है, या अगर इमेज उपलब्ध नहीं होती, तो शून्य दिखाता है
MediaMetadata
. आपका ऐप्लिकेशन, ImagePicker
को सब-क्लास में शामिल कर सकता है और
onPickImage(MediaMetadata, ImageHints)
का इस्तेमाल करें, और फिर उस सब-क्लास को चुनें
के साथ
setImagePicker
CastMediaOptions.Builder
का तरीका.
ImageHints
किसी इमेज के टाइप और साइज़ के बारे में, ImagePicker
को संकेत देता है
यूज़र इंटरफ़ेस (यूआई) में दिखाने के लिए चुना गया.
कास्ट डायलॉग को पसंद के मुताबिक बनाना
सेशन की लाइफ़साइकल मैनेज करना
SessionManager
सेशन की लाइफ़साइकल को मैनेज करने की मुख्य जगह है. SessionManager
ने सुना
Android पर
MediaRouter
सेशन को शुरू, फिर से शुरू, और खत्म करने के लिए, रूट चुनने की स्थिति में बदलाव किया जाता है. जब कोई रास्ता
चुना गया है, SessionManager
कोई
Session
ऑब्जेक्ट को पुनः शुरू करने या उसे फिर से शुरू करने का प्रयास करता है. किसी रास्ते से चुने हुए का निशान हटाने पर,
SessionManager
मौजूदा सेशन को खत्म कर देगा.
इसलिए, यह पक्का करने के लिए कि SessionManager
, सेशन के लाइफ़साइकल को सही तरीके से मैनेज करे, इसके लिए
कृपया यह पक्का करें कि:
- रूट चुनने वाले डायलॉग में,
कॉल करें
MediaRouter.selectRoute(MediaRouter.RouteInfo)
जब कोई उपयोगकर्ता किसी डिवाइस को चुनता है. - रूट कंट्रोलर के डायलॉग में (या तो कनेक्ट किया गया)
राज्य या
कास्ट करें
राज्य),
कॉल करें
MediaRouter.unselect(int)
जब उपयोगकर्ता कास्ट करना बंद कर देता है.
कास्ट करने के लिए बनाए गए डायलॉग बॉक्स को बनाने के तरीके के आधार पर, आपको हो गया:
- यदि आप इसका उपयोग करके कास्ट करें संवाद बनाते हैं
MediaRouteChooserDialog
औरMediaRouteControllerDialog
, तो ये डायलॉग अपने-आपMediaRouter
में रास्ता चुनाव को अपडेट कर देंगे, इसलिए, आपको कुछ करने की ज़रूरत नहीं है. - अगर आपने 'कास्ट करें' बटन को
CastButtonFactory.setUpMediaRouteButton(Context, Menu, int)
याCastButtonFactory.setUpMediaRouteButton(Context, MediaRouteButton)
, तो डायलॉग वाकई मेंMediaRouteChooserDialog
औरMediaRouteControllerDialog
का उपयोग करके बनाया गया, इसलिए आपको कुछ करने की ज़रूरत नहीं है. - अन्य मामलों में, आपको पसंद के मुताबिक कास्ट डायलॉग बनाने होंगे, इसलिए आपको
रास्ता चुनने की स्थिति अपडेट करने के लिए, ऊपर दिए गए निर्देशों का पालन करें
MediaRouter
.
ज़ीरो डिवाइस की स्थिति
यदि आप कस्टम कास्ट डायलॉग बनाते हैं, तो आपका कस्टम
अगर कोई डिवाइस नहीं जुड़ा है, तो MediaRouteChooserDialog
को उसे ठीक से हैंडल करना चाहिए
मिल गया. डायलॉग में ऐसे इंडिकेटर दिखने चाहिए जिनसे लोगों को यह साफ़ तौर पर पता चल सके कि
ऐप्लिकेशन अब भी डिवाइसों को ढूंढने की कोशिश कर रहा है और जब खोज करने की कोशिश नहीं की जाती है
लंबे समय तक सक्रिय रहता है.
अगर डिफ़ॉल्ट MediaRouteChooserDialog
का इस्तेमाल किया जा रहा है, तो किसी डिवाइस का स्टेटस शून्य दिखेगा
को पहले ही हैंडल किया जा चुका है.
अगले चरण
इसके साथ वे सुविधाएं पूर्ण होती हैं जिन्हें आप अपने Android Sender ऐप्लिकेशन में जोड़ सकते हैं. अब आप किसी दूसरे प्लैटफ़ॉर्म के लिए सेंडर ऐप्लिकेशन बना सकते हैं (iOS या वेब) या एक वेब रिसीवर ऐप्लिकेशन बनाएं.