Cast SDK v2'den Android Gönderen Uygulamasını Cast Uygulama Çerçevesi'ne (CAF) Taşıma

Aşağıdaki prosedür, Android gönderen uygulamanızı Cast SDK v2'den CastContext singleton'u temel alan CAF Gönderen'e dönüştürmenizi sağlar.

Cast CAF Gönderen SDK'sı, GoogleAPIClient'ı sizin adınıza yönetmek için CastContext'i kullanır. CastContext, yaşam döngülerini, hataları ve geri çağırmaları sizin için yöneterek Cast uygulaması geliştirmeyi büyük ölçüde basitleştirir.

Giriş

  • CAF Sender, Android SDK Manager kullanılarak Google Play Hizmetleri kapsamında dağıtılmaya devam eder.
  • Google Cast Tasarım Kontrol Listesi'ne (com.google.android.gms.cast.framework.*) uyma sorumluluğunu üstlenen yeni paketler eklendi.
  • CAF Gönderici, Cast kullanıcı deneyimi şartlarına uygun widget'lar sağlar. v2, herhangi bir kullanıcı arayüzü bileşeni sağlamaz ve bu widget'ları uygulamanızı gerektirir.
  • Cast API'yi kullanmak için artık GoogleApiClient kullanılması gerekmez.
  • CAF Sender'daki altyazı, v2'dekine benzer.

Bağımlılıklar

V2 ve CAF, Destek Kitaplığı Özellikleri Kılavuzu'nda açıklandığı gibi destek kitaplıkları ve Google Play Hizmetleri (9.2.0 veya sonraki sürümler) ile aynı bağımlılıklara sahiptir.

CAF'nin desteklediği minimum Android SDK sürümü 9'dur (Gingerbread).

Başlatma

CAF'de, Cast çerçevesi için açık bir başlatma adımı gerekir. Bu işlem, Web Alıcı uygulama kimliğini ve diğer genel seçenekleri belirtmek için uygun bir OptionsProvider kullanarak CastContext singleton'ını başlatmayı içerir.

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;
    }
}

Uygulamanın AndroidManifest.xml dosyasındaki "application" etiketinde OptionsProvider öğesini beyan edin:

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

Her etkinliğin onCreate yönteminde CastContext öğesini geç başlatın:

private CastContext mCastContext;

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

    mCastContext = CastContext.getSharedInstance(this);
}

Bu adımlar v2'de gerekli değildi.

Cihaz bulma

CAF'de keşif işlemi, uygulama ön plana geldiğinde ve arka plana geçtiğinde çerçeve tarafından otomatik olarak başlatılır ve durdurulur. MediaRouteSelector ve MediaRouter.Callback kullanılmamalıdır.

Yayınla düğmesi ve Yayınla iletişim kutusu

Sürüm 2'de olduğu gibi bu bileşenler MediaRouter destek kitaplığı tarafından sağlanır.

Yayınla düğmesi hâlâ MediaRouteButton tarafından uygulanır ve etkinliğinize (ActionBar veya Toolbar kullanarak) menünüzde bir menü öğesi olarak eklenebilir.

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

MediaRouteButton öğesini Cast çerçevesine bağlamak için CastButtonFactory kullanarak her etkinliğin onCreateOptionMenu() yöntemini geçersiz kılın:

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;
}

Kullanıcı düğmeye dokunduğunda yayınlama iletişim kutusu otomatik olarak gösterilir.

Cihaz denetimi

CAF'de cihaz kontrolü büyük ölçüde çerçeve tarafından gerçekleştirilir. Gönderen uygulamasının, GoogleApiClient kullanarak cihaza bağlanma ve Web Alıcısı uygulamasını başlatma işlemlerini yapması gerekmez (ve yapmaya çalışmamalıdır). Gönderen ile Web Alıcısı arasındaki etkileşim artık "oturum" olarak temsil edilir. SessionManager sınıfı, oturum yaşam döngüsünü yönetir ve kullanıcı hareketlerine yanıt olarak oturumları otomatik olarak başlatıp durdurur: Kullanıcı, Yayınla iletişim kutusunda bir yayın cihazı seçtiğinde oturum başlatılır ve kullanıcı, Yayınla iletişim kutusunda "Yayını Durdur" düğmesine dokunduğunda veya gönderen uygulamanın kendisi sonlandırıldığında oturum sona erer. Gönderen uygulama, SessionManager ile bir SessionManagerListener kaydederek oturum yaşam döngüsü etkinliklerinden haberdar olabilir. SessionManagerListener geri çağırmaları, tüm oturum yaşam döngüsü olayları için geri çağırma yöntemlerini tanımlar.

CastSession sınıfı, bir Cast cihazıyla oturumu temsil eder. Sınıf, cihaz ses seviyesini ve ses kapatma durumlarını kontrol etmek için yöntemlere sahiptir. Bu işlem daha önce 2. sürümde Cast.CastApi üzerindeki yöntemler kullanılarak yapılıyordu.

2. sürümde, Cast.Listener geri çağırmaları; ses düzeyi, ses kapatma durumu, bekleme durumu vb. dahil olmak üzere cihaz durumundaki değişikliklerle ilgili bildirimler sağlıyordu.

CAF'de, ses seviyesi/sessize alma durumu değişikliği bildirimleri Cast.Listener içindeki geri çağırma yöntemleri aracılığıyla gönderilmeye devam eder. Bu dinleyiciler CastSession ile kaydedilir. Kalan tüm cihaz durumu bildirimleri CastStateListener geri çağırmaları aracılığıyla gönderilir. Bu dinleyiciler CastSession ile kaydedilir. İlişkili parçalar, etkinlikler veya uygulamalar arka plana geçtiğinde dinleyicilerin kaydını iptal etmeye devam ettiğinizden emin olun.

Yeniden bağlanma mantığı

V2'de olduğu gibi CAF, geçici kablosuz sinyal kaybı veya diğer ağ hataları nedeniyle kesilen ağ bağlantılarını yeniden kurmaya çalışır. Bu işlem artık oturum düzeyinde yapılır. Bağlantı kesildiğinde oturum "askıya alındı" durumuna girebilir ve bağlantı yeniden kurulduğunda tekrar "bağlı" durumuna geçer. Çerçeve, Web Alıcısı uygulamasına yeniden bağlanma ve bu işlemin bir parçası olarak tüm yayın kanallarına yeniden bağlanma işlemlerini gerçekleştirir.

Ayrıca CAF, varsayılan olarak etkinleştirilen (ve CastOptions aracılığıyla devre dışı bırakılabilen) otomatik oturum devam ettirme özelliğini de ekler. Yayın oturumu devam ederken gönderen uygulama arka plana gönderilir veya sonlandırılırsa (kaydırarak kapatma veya kilitlenme nedeniyle) gönderen uygulama ön plana döndüğünde ya da yeniden başlatıldığında çerçeve, oturumu devam ettirmeye çalışır. Bu işlem, SessionManager tarafından otomatik olarak gerçekleştirilir ve kayıtlı tüm SessionManagerListener örneklerinde uygun geri çağırmalar yapılır.

Özel kanal kaydı

Sürüm 2'de, özel kanallar (Cast.MessageReceivedCallback kullanılarak uygulanır) Cast.CastApi ile kaydedilir. CAF'de özel kanallar bunun yerine CastSession örneğine kaydedilir. Kayıt işlemi, SessionManagerListener.onSessionStarted geri çağırma yönteminde yapılabilir. Medya uygulamaları için artık medya kontrol kanalını Cast.CastApi.setMessageReceivedCallbacks üzerinden açıkça kaydetmek gerekmez. Daha fazla bilgi için aşağıdaki bölüme bakın.

Medya kontrolü

RemoteMediaPlayer v2 sınıfı için destek sonlandırıldı ve bu sınıf kullanılmamalıdır. CAF'de, daha kullanışlı bir API'de eşdeğer işlevsellik sağlayan yeni RemoteMediaClient sınıfı bunun yerini almıştır. Bu nesneyi açıkça ilk kullanıma hazırlamak veya kaydettirmek gerekmez. Bağlanılan Web Alıcısı uygulaması, medya ad alanını destekliyorsa çerçeve, oturum başlangıç zamanında nesneyi otomatik olarak örneklendirir ve temel medya kanalını kaydeder.

RemoteMediaClient, CastSession nesnesinin getRemoteMediaClient yöntemi olarak erişilebilir.

Sürüm 2'de, RemoteMediaPlayer üzerinde gönderilen tüm medya istekleri, PendingResult geri çağırma işlevi aracılığıyla bir RemoteMediaPlayer.MediaChannelResult döndürür.

CAF'ta, RemoteMediaClient üzerinde gönderilen tüm medya istekleri, isteğin ilerleme durumunu ve nihai sonucunu izlemek için kullanılabilecek bir PendingResult geri çağırma işlevi aracılığıyla bir RemoteMediaClient.MediaChannelResult döndürür.

v2 RemoteMediaPlayer, Web Alıcısı'ndaki medya oynatıcı durumundaki değişikliklerle ilgili bildirimleri RemoteMediaPlayer.OnStatusUpdatedListener üzerinden gönderir.

CAF'de RemoteMediaClient, RemoteMediaClient.Listener arayüzü üzerinden eşdeğer geri çağırmalar sağlar. RemoteMediaClient ile dilediğiniz sayıda dinleyici kaydedilebilir. Bu sayede, birden fazla gönderen bileşeni, oturumla ilişkili tek bir RemoteMediaClient örneğini paylaşabilir.

Sürüm 2'de, kullanıcı arayüzünü Web Alıcısı'ndaki medya oynatıcı durumuyla senkronize tutma yükünü gönderen uygulamanın üstlenmesi gerekiyordu.

CAF'de bu sorumluluğun çoğunu UIMediaController sınıfı üstlenir.

Tanıtım amaçlı yer paylaşımı

V2, tanıtım amaçlı bir yer paylaşımı kullanıcı arayüzü sunmaz.

CAF, kullanıcılara ilk kez gösterildiğinde Yayınla düğmesini vurgulamak için özel bir görünüm IntroductoryOverlay sağlar.

Mini kumanda

Sürüm 2'de, gönderen uygulamada sıfırdan bir mini kumanda uygulamanız gerekir.

CAF'ta SDK, mini kumandayı göstermek istediğiniz etkinliklerin uygulama düzeni dosyasına ekleyebileceğiniz özel bir görünüm (MiniControllerFragment) sağlar.

Bildirim ve kilit ekranı

2. sürümde, bildirim ve kilit ekranı denetleyicileri SDK tarafından sağlanmaz. Bu SDK için Android çerçeve API'lerini kullanarak bu özellikleri gönderen uygulamanıza eklemeniz gerekir.

CAF'ta SDK, gönderen uygulamasına bildirim ve kilit ekranı için medya kontrolleri eklemenize yardımcı olan bir NotificationsOptions.Builder sağlar. Bildirim ve kilit ekranı kontrolleri, CastContext başlatılırken CastOptions ile etkinleştirilebilir.

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();
}

Genişletilmiş kumanda

Sürüm 2'de, gönderen uygulamasında sıfırdan genişletilmiş bir denetleyici uygulamanız gerekir.

CAF, kendi genişletilmiş kumandanızı oluşturmanızı kolaylaştıran bir UIMediaController yardımcı sınıfı sağlar.

CAF, uygulamanıza kolayca ekleyebileceğiniz önceden oluşturulmuş genişletilmiş bir kumanda widget'ı ExpandedControllerActivity ekler. Artık UIMediaController kullanarak özel bir genişletilmiş kumanda uygulamanız gerekmez.

Ses odağı

2. sürümde ses odağını yönetmek için MediaSessionCompat kullanmanız gerekir.

CAF'de ses odağı otomatik olarak yönetilir.

Hata ayıklama günlük kaydı

CAF'ta günlük kaydı seçeneği yoktur.

Örnek uygulamalar

CAF kullanan codelab eğitimlerimiz ve örnek uygulamalarımız var.