Android सेंडर ऐप्लिकेशन को Cast SDK v2 से कास्ट ऐप्लिकेशन फ़्रेमवर्क (CAF) में माइग्रेट करें

नीचे दिए गए तरीके से, Android पर भेजने वाले ऐप्लिकेशन को Cast से बदला जा सकता है SDK टूल v2 का इस्तेमाल सीएएफ़ भेजने वाले के लिए किया जाता है. इसे CastContext सिंगलटन.

Cast CAF भेजने वाला SDK टूल, आपकी ओर से GoogleAPIClient को मैनेज करने के लिए, CastContext का इस्तेमाल करता है. CastContext आपके लिए, लाइफ़साइकल, गड़बड़ियां, और कॉलबैक मैनेज करता है, जो कि Cast ऐप्लिकेशन डेवलप करना आसान बनाता है.

परिचय

  • सीएएफ़ ईमेल भेजने वाले को, अब भी Google Play services के हिस्से के तौर पर उपलब्ध कराया जाता है Android SDK मैनेजर का इस्तेमाल करके
  • नए पैकेज जोड़े गए हैं, जो इन नीतियों का पालन करने की ज़िम्मेदारी लेते हैं Google Cast डिज़ाइन चेकलिस्ट (com.google.android.gms.cast.framework.*)
  • CAF सेंडर ऐसे विजेट उपलब्ध कराता है जो Cast UX से जुड़ी ज़रूरी शर्तों का पालन करते हैं; वर्शन 2 में कोई यूज़र इंटरफ़ेस (यूआई) कॉम्पोनेंट नहीं दिया गया है और इसलिए आपको इन्हें लागू करना होगा विजेट.
  • Cast API का इस्तेमाल करने के लिए अब GoogleApiClient का इस्तेमाल करने की ज़रूरत नहीं है.
  • सीएएफ़ सेंडर में सबटाइटल की सुविधा, वर्शन 2 की तरह है.

डिपेंडेंसी

सपोर्ट लाइब्रेरी और Google Play पर, वर्शन 2 और सीएएफ़ की एक जैसी चीज़ें होती हैं सेवाएं (9.2.0 या उसके बाद के वर्शन) जैसा कि सहायता लाइब्रेरी की सुविधाओं में बताया गया है गाइड

सीएएफ़ के साथ काम करने वाला, Android SDK का कम से कम 9 (Gingerbread) वर्शन है.

डेटा लेयर में इवेंट बनाने की प्रोसेस

सीएएफ़ में, कास्ट फ़्रेमवर्क के लिए साफ़ तौर पर शुरू करने का चरण ज़रूरी है. यह में मैन्युअल तौर पर CastContext सिंगलटन, सही का इस्तेमाल करके OptionsProvider का उपयोग करें.

public class CastOptionsProvider implements OptionsProvider {

    @Override
    public CastOptions getCastOptions(Context context) {
        return new CastOptions.Builder()
                .setReceiverApplicationId(context.getString(R.string.app_id))
                .build();
    }

    @Override
    public List<SessionProvider> getAdditionalSessionProviders(Context context) {
        return null;
    }
}

"ऐप्लिकेशन" में OptionsProvider के बारे में बताएं ऐप्लिकेशन का टैग AndroidManifest.xml फ़ाइल:

<application>
...
    <meta-data
        android:name=
            "com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
        android:value="com.google.sample.cast.refplayer.CastOptionsProvider" />
</application>

हर ऐक्टिविटी के onCreate तरीके में, CastContext को धीरे-धीरे शुरू करें:

private CastContext mCastContext;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.video_browser);
    setupActionBar();

    mCastContext = CastContext.getSharedInstance(this);
}

वर्शन 2 में ये चरण ज़रूरी नहीं थे.

कास्ट की सुविधा वाले डिवाइस खोजना

सीएएफ़ में, डिस्कवरी की प्रोसेस अपने-आप शुरू और बंद हो जाती है फ़्रेमवर्क के मुताबिक, जब ऐप्लिकेशन फ़ोरग्राउंड में आता है और बैकग्राउंड में जाता है, क्रम से. MediaRouteSelector और MediaRouter.Callback को नहीं इस्तेमाल किया गया.

'कास्ट करें' बटन और 'कास्ट करें' डायलॉग

वर्शन 2 की तरह, ये कॉम्पोनेंट MediaRouter की सहायता टीम ने उपलब्ध कराए हैं लाइब्रेरी पर जाएं.

'कास्ट करें' बटन को अब भी MediaRouteButton इन्हें आपकी गतिविधि में जोड़ा जा सकता है. इसके लिए, ActionBar या एक Toolbar), मेन्यू में आइटम के तौर पर जोड़ा जा सकता है.

<item
    android:id="@+id/media_route_menu_item"
    android:title="@string/media_route_menu_title"
    app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
    app:showAsAction="always"/>

इनका इस्तेमाल करके, हर ऐक्टिविटी के लिए onCreateOptionMenu() तरीका बदलें CastButtonFactory MediaRouteButton को कास्ट फ़्रेमवर्क से कनेक्ट करने के लिए:

private MenuItem mediaRouteMenuItem;

public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.browse, menu);
    mediaRouteMenuItem =
        CastButtonFactory.setUpMediaRouteButton(getApplicationContext(),
                                                menu,
                                                R.id.media_route_menu_item);
    return true;
}

जब कोई व्यक्ति बटन पर टैप करता है, तो कास्ट करें डायलॉग अपने-आप दिखने लगता है.

डिवाइस नियंत्रण

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

कॉन्टेंट बनाने CastSession क्लास, कास्ट डिवाइस वाले सेशन को दिखाती है. क्लास में इसके लिए तरीके होते हैं इससे डिवाइस की आवाज़ और म्यूट की स्थिति को कंट्रोल किया जा सकता है. यह सुविधा, पहले वर्शन 2 में उपलब्ध थी Cast.CastApi पर तरीकों का इस्तेमाल करके.

वर्शन 2 में, Cast.Listener कॉलबैक से डिवाइस की स्थिति में होने वाले बदलावों की सूचनाएं मिलती हैं. इनमें ये बदलाव भी शामिल हैं वॉल्यूम, म्यूट स्थिति, स्टैंडबाय स्थिति वगैरह.

सीएएफ़ में, आवाज़/म्यूट होने की स्थिति में बदलाव की सूचनाएं अब भी कॉलबैक से दी जाती हैं Cast.Listener में बताए गए तरीके; ये लिसनर CastSession. डिवाइस की स्थिति की बाकी सभी सूचनाएं, इसके ज़रिए दी जाती हैं CastStateListener कॉलबैक; ये लिसनर CastSession के साथ रजिस्टर हैं. पक्का करें कि इससे जुड़े फ़्रैगमेंट, गतिविधियों या ऐप्लिकेशन के बंद होने पर भी, लिसनर का रजिस्ट्रेशन रद्द हो जाएगा से बैकग्राउंड में रखने के लिए किया जा सकता है.

रीकनेक्शन लॉजिक

वर्शन 2 की तरह सीएएफ़, ऐसे नेटवर्क कनेक्शन फिर से लाने की कोशिश करता है जो वे अस्थायी रूप से वाई-फ़ाई सिग्नल खो जाने या नेटवर्क की अन्य गड़बड़ियों के चलते खो जाते हैं. यह अब है सेशन लेवल पर किया गया हो; सेशन के दौरान "निलंबित" किया जा सकता है बताएं कि कनेक्शन टूट जाता है और वापस "कनेक्ट हो गया" पर सेट हो जाता है बताएं कि कनेक्टिविटी पहले जैसी कर दी जाती है. यह फ़्रेमवर्क इस प्रोसेस के हिस्से के तौर पर, वेब रिसीवर ऐप्लिकेशन और किसी भी कास्ट चैनल को फिर से कनेक्ट करना.

इसके अलावा, सीएएफ़ अपने-आप सेशन को फिर से शुरू करने की सुविधा भी जोड़ता है. यह सुविधा चालू करने पर डिफ़ॉल्ट (और इसे इसके ज़रिए निष्क्रिय किया जा सकता है CastOptions. अगर भेजने वाले का ऐप्लिकेशन बैकग्राउंड पर भेजा जाता है या उसे ( स्वाइप-अवे या क्रैश होने के कारण) होने पर, भेजने वाले का आवेदन मिलने पर, फ़्रेमवर्क उस सेशन को फिर से शुरू करने की कोशिश करेगा फ़ोरग्राउंड पर वापस लौटता है या फिर से लॉन्च किया जाता है; इसे SessionManager, जो रजिस्टर किए गए किसी भी डोमेन पर सही कॉलबैक जारी करेगा SessionManagerListener इंस्टेंस.

कस्टम चैनल रजिस्ट्रेशन

वर्शन 2 में, कस्टम चैनल (इन्हें इस्तेमाल करके लागू किया गया है) Cast.MessageReceivedCallback) Cast.CastApi पर रजिस्टर किए गए हों. सीएएफ़ में, कस्टम चैनल इसके साथ रजिस्टर होते हैं: CastSession इंस्टेंस. रजिस्ट्रेशन यहां किया जा सकता है: SessionManagerListener.onSessionStarted कॉलबैक का तरीका. मीडिया ऐप्लिकेशन के लिए, अब साफ़ तौर पर Cast.CastApi.setMessageReceivedCallbacks के ज़रिए मीडिया कंट्रोल चैनल रजिस्टर करें; ज़्यादा जानकारी के लिए, यहां मौजूद सेक्शन देखें.

मीडिया नियंत्रण

v2 क्लास RemoteMediaPlayer के इस्तेमाल पर रोक लगा दी गई है और इसका इस्तेमाल नहीं किया जाना चाहिए. सीएएफ़ में इसकी जगह RemoteMediaClient क्लास का इस्तेमाल करती है, जो ज़्यादा आसान एपीआई में एक जैसी सुविधाएं देती है. हां साफ़ तौर पर इस ऑब्जेक्ट को शुरू या रजिस्टर करने के लिए ज़रूरी नहीं; फ़्रेमवर्क ऑब्जेक्ट को अपने-आप इंस्टैंशिएट करेगा और उसमें मौजूद मीडिया को रजिस्टर करेगा अगर वेब रिसीवर ऐप्लिकेशन को कनेक्ट किया जा रहा है, तो सेशन शुरू होने के समय पर चैनल मीडिया नेमस्पेस के साथ काम करता है.

RemoteMediaClient को इस तौर पर ऐक्सेस किया जा सकता है: CastSession ऑब्जेक्ट का getRemoteMediaClient तरीका.

वर्शन 2 में, RemoteMediaPlayer पर जारी किए गए सभी मीडिया अनुरोध PendingResult कॉलबैक से RemoteMediaPlayer.MediaChannelResult.

सीएएफ़ में, RemoteMediaClient पर जारी किए गए सभी मीडिया अनुरोध RemoteMediaClient.MediaChannelResult किसी PendingResult कॉलबैक का इस्तेमाल किया जा सकता है, ताकि इसकी प्रोग्रेस और आखिरी नतीजे को ट्रैक किया जा सके अनुरोध.

वर्शन 2 RemoteMediaPlayer, मीडिया में होने वाले बदलावों के बारे में सूचनाएं भेजेगा वेब रिसीवर पर प्लेयर की स्थिति RemoteMediaPlayer.OnStatusUpdatedListener.

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

वर्शन 2 में, ईमेल भेजने वाले के ऐप्लिकेशन को उपयोगकर्ता को बनाए रखने का बोझ उठाना पड़ता था ऐसा इंटरफ़ेस जो वेब रिसीवर पर मीडिया प्लेयर की स्थिति के साथ सिंक होता है.

सीएएफ़ में, क्लास UIMediaController वह इस ज़िम्मेदारी को सबसे ज़्यादा निभाता है.

शुरुआती ओवरले

वर्शन 2 में शुरुआती ओवरले यूआई नहीं है.

सीएएफ़ कस्टम व्यू देता है IntroductoryOverlay ताकि उपयोगकर्ताओं को पहली बार 'कास्ट करें' बटन को हाइलाइट किया जा सके.

मिनी कंट्रोलर

वर्शन 2 में, आपको भेजने वाले ऐप्लिकेशन में शुरू से एक मिनी कंट्रोलर लागू करना होगा.

सीएएफ़ में, SDK टूल एक कस्टम व्यू देता है. MiniControllerFragment इसे उन गतिविधियों की ऐप्लिकेशन लेआउट फ़ाइल में जोड़ा जा सकता है जिनमें आपको मिनी कंट्रोलर दिखाना है.

सूचना और लॉक स्क्रीन

वर्शन 2 में, SDK टूल ने सूचना और लॉक स्क्रीन के लिए कंट्रोलर उपलब्ध नहीं कराया है. उस SDK टूल के लिए, आपको Android फ़्रेमवर्क के एपीआई.

सीएएफ़ में, एसडीके टूल NotificationsOptions.Builder इससे आपको सूचना और लॉक स्क्रीन के लिए मीडिया कंट्रोल बनाने में मदद मिलेगी भेजने वाले ऐप्लिकेशन में. सूचना और लॉक स्क्रीन से जुड़े कंट्रोल चालू किए जा सकते हैं के साथ CastOptions शुरू करते समय CastContext को शुरू करते हैं.

public CastOptions getCastOptions(Context context) {
    NotificationOptions notificationOptions = new NotificationOptions.Builder()
            .setTargetActivityClassName(VideoBrowserActivity.class.getName())
            .build();
    CastMediaOptions mediaOptions = new CastMediaOptions.Builder()
            .setNotificationOptions(notificationOptions)
            .build();

    return new CastOptions.Builder()
            .setReceiverApplicationId(context.getString(R.string.app_id))
            .setCastMediaOptions(mediaOptions)
            .build();
}

बड़ा किया गया कंट्रोलर

वर्शन 2 में, आपको भेजने वाले ऐप्लिकेशन का इस्तेमाल करने के लिए किया जा सकता है.

सीएएफ़ UIMediaController हेल्पर क्लास की मदद से अपना विस्तार करना आसान बनाएं कंट्रोलर.

सीएएफ़, पहले से बने बड़े किए गए कंट्रोलर विजेट को जोड़ता है ExpandedControllerActivity इसे ऐप्लिकेशन में आसानी से जोड़ा जा सकता है. अब आपको ये काम करने की ज़रूरत नहीं है UIMediaController का इस्तेमाल करके, पसंद के मुताबिक बड़ा किया गया कंट्रोलर लागू करें.

ऑडियो फ़ोकस

वर्शन 2 में ऑडियो फ़ोकस को मैनेज करने के लिए, आपको MediaSessionCompat का इस्तेमाल करना होगा.

सीएएफ़ में, ऑडियो फ़ोकस अपने-आप मैनेज हो जाता है.

डीबग लॉगिंग

सीएएफ़ में, डेटा लॉग करने का कोई विकल्प नहीं होता.

सैंपल ऐप्लिकेशन

हमारे पास कोडलैब के ट्यूटोरियल और ऐप्लिकेशन के सैंपल जो सीएएफ़ का इस्तेमाल करते हैं.