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 single'ına dayanan CAF Sender'a 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 aracılığıyla Google Play Hizmetleri'nin bir parçası olarak dağıtılmaya devam eder
  • Google Cast Tasarımı kontrol listesine uyma sorumluluğunu üstlenen yeni paketler eklendi (com.google.android.gms.cast.framework.*)
  • CAF Sender, Cast kullanıcı deneyimi şartlarına uyan widget'lar sağlar. v2, herhangi bir kullanıcı arayüzü bileşeni sağlamamıştır ve bu widget'ları uygulamanızı gerektirmiştir.
  • Cast API'yi kullanmak için artık GoogleApiClient'ın kullanımı gerekli değildir.
  • CAF Sender'daki altyazı özelliği v2'ye benzer.

Bağımlılıklar

V2 ve CAF, Destek Kitaplığı Özellikleri Kılavuzu'nda açıklandığı gibi destek kitaplıklarına ve Google Play hizmetlerine (9.2.0 veya üzeri) 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ı gereklidir. Bu işlem, Web Alıcısı uygulama kimliğini ve diğer genel seçenekleri belirtmek için uygun bir OptionsProvider kullanarak CastContext single'ı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;
    }
}

AndroidManifest.xml dosyasının "application" etiketinde OptionsProvider öğesini tanımlayın:

<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 özelliğini 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 süreci, uygulama ön plana geçip arka plana gittiğ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

v2'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ıyor ve menünüzde menü öğesi olarak ActionBar veya Toolbar kullanılarak etkinliğinize 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 cihazını 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;
}

Bir kullanıcı düğmeye dokunduğunda, Yayınla iletişim kutusu otomatik olarak gösterilir.

Cihaz kontrolü

CAF'de cihaz kontrolü büyük ölçüde çerçeve tarafından yönetilir. Gönderen uygulamanın, cihaza bağlanma ve GoogleApiClient kullanarak Web Alıcısı uygulamasını başlatması gerekmez (ve yapmaya çalışmamalıdır). Gönderen ve Web Alıcısı arasındaki etkileşim artık bir "oturum" olarak temsil edilmektedir. SessionManager sınıfı, oturum yaşam döngüsünü yönetir ve kullanıcı hareketlerine karşılık oturumları otomatik olarak başlatıp durdurur: Kullanıcı, Yayınla iletişim kutusunda bir Cast cihazı seçtiğinde bir oturum başlatılır ve kullanıcı Yayın iletişim kutusunda "Yayını Durdur" düğmesine dokunduğunda veya gönderen uygulamanın kendisi sona erdiğinde sona erer. Gönderen uygulama, SessionManager ile bir SessionManagerListener kaydedilerek oturum yaşam döngüsü etkinlikleri hakkında bilgilendirilebilir. SessionManagerListener geri çağırmaları, tüm oturum yaşam döngüsü etkinlikleri için geri çağırma yöntemlerini tanımlar.

CastSession sınıfı, yayın cihazı içeren bir oturumu temsil eder. Sınıfta, cihaz ses düzeyini ve ses kapatma durumlarını kontrol etmek için çeşitli yöntemler bulunmaktadır. Bu yöntemler, daha önce Cast.CastApi hizmetindeki v2 sürümünde yapılıyordu.

v2'de Cast.Listener geri çağırma işlevleri; ses düzeyi, sesi kapatma durumu, bekleme durumu vb. cihaz durumundaki değişikliklerle ilgili bildirimler sağlıyordu.

CAF'de ses düzeyi/sessiz durumu değişikliği bildirimleri, Cast.Listener içindeki geri çağırma yöntemleri aracılığıyla gönderilir. Bu işleyiciler CastSession ile kayıtlıdır. Geri kalan cihaz durumu bildirimlerinin tümü CastStateListener geri çağırma işlevleriyle iletilir. Bu dinleyiciler CastSession kapsamında kayıtlıdır. İlişkili parçalar, etkinlikler veya uygulamalar arka plana gittiğinde dinleyicilerin kaydını yine de iptal ettiğinizden emin olun.

Yeniden bağlanma mantığı

CAF, v2'de olduğu gibi geçici kablosuz sinyal kaybı veya diğer ağ hataları nedeniyle kaybedilen ağ bağlantılarını yeniden kurmaya çalışır. Bu işlem artık oturum düzeyinde gerçekleştirilir. Bağlantı kesildiğinde oturum "askıya alındı" durumuna geçebilir ve bağlantı geri yüklendiğinde tekrar "bağlı" durumuna geçer. Çerçeve, Web Alıcısı uygulamasına yeniden bağlanmayı ve bu sürecin bir parçası olarak Yayın kanallarını yeniden bağlamayı sağlar.

Buna ek olarak CAF'ye varsayılan olarak etkinleştirilen (ve CastOptions ile devre dışı bırakılabilen) otomatik oturum devam ettirme özelliği de eklenir. Gönderen uygulama arka plana gönderilirse veya bir Yayın oturumu devam ederken kaydırmayla ya da kilitlenme nedeniyle sonlandırılırsa çerçeve, gönderen uygulaması ön plana geri döndüğünde veya yeniden başlatıldığında söz konusu 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ı

v2'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, SessionManagerListener.onSessionStarted geri çağırma yöntemiyle yapılabilir. Medya uygulamalarında, medya kontrol kanalının Cast.CastApi.setMessageReceivedCallbacks üzerinden açıkça kaydedilmesine gerek yoktur. Daha fazla bilgi için aşağıdaki bölüme bakın.

Medya kontrolü

RemoteMediaPlayer v2 sınıfının desteği sonlandırıldığı için bu sınıf kullanılmamalıdır. CAF'de bunun yerini, daha kullanışlı bir API'de eşdeğer işlevler sunan yeni RemoteMediaClient sınıfı aldı. Bu nesneyi açıkça başlatmak veya kaydetmek gerekmez. Bağlanılan Web Alıcı uygulaması medya ad alanını destekliyorsa çerçeve, oturum başlangıç zamanında nesneyi otomatik olarak örneklendirir ve temel medya kanalını kaydeder.

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

v2'de, RemoteMediaPlayer üzerinden gönderilen tüm medya istekleri PendingResult geri çağırması aracılığıyla RemoteMediaPlayer.MediaChannelResult döndürür.

CAF'de, RemoteMediaClient aracılığıyla gönderilen tüm medya istekleri PendingResult geri çağırması aracılığıyla RemoteMediaClient.MediaChannelResult döndürür. Bu geri çağırma, isteğin ilerlemesini ve nihai sonucunu izlemek için kullanılabilir.

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ü aracılığıyla eşdeğer geri çağırmalar sağlar. RemoteMediaClient öğesine istenen sayıda işleyici kaydedilebilir. Bu da birden fazla gönderen bileşeninin oturumla ilişkili tek bir RemoteMediaClient örneğini paylaşmasına olanak tanır.

v2'de gönderen uygulamanın, kullanıcı arayüzünü Web Alıcısı'ndaki medya oynatıcı durumuyla senkronize etme yükünü üstlenmesi gerekiyordu.

CAF'de bu sorumluluğun büyük bir kısmını UIMediaController üstleniyor.

Tanıtım yer paylaşımı

V2, yer paylaşımlı tanıtım kullanıcı arayüzü sağlamaz.

CAF, kullanıcılara ilk kez gösterildiğinde Yayınla düğmesinin vurgulandığı özel bir görünüm IntroductoryOverlay sağlar.

Mini kumanda

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

CAF'de SDK, mini denetleyiciyi göstermek istediğiniz etkinliklerin uygulama düzen dosyasına ekleyebileceğiniz özel bir MiniControllerFragment görünümü sunar.

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ızda oluşturmanız gerekir.

SDK, CAF'de gönderen uygulamasına bildirim ve kilit ekranı için medya denetimleri oluşturmanıza yardımcı olmak amacıyla bir NotificationsOptions.Builder sağlar. Bildirim ve kilit ekranı denetimleri, CastContext ilk kullanıma hazırlanı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ş denetleyici

v2'de, gönderen uygulamasında sıfırdan genişletilmiş bir denetleyici uygulamanız gerekir.

CAF, kendi genişletilmiş denetleyicinizi geliştirmenizi kolaylaştıran bir UIMediaController yardımcı sınıfı sağlar.

CAF, uygulamanıza kolayca ekleyebileceğiniz önceden oluşturulmuş bir genişletilmiş denetleyici widget'ı ExpandedControllerActivity ekler. Artık UIMediaController kullanarak özel genişletilmiş denetleyici 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'de günlük kaydı seçeneği yoktur.

Örnek uygulamalar

CAF kullanan codelab eğiticilerimiz ve örnek uygulamalarımız mevcuttur.