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 tekil nesnesini 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ğırma işlemlerini sizin için yönetir. Bu sayede Cast uygulaması geliştirmek çok daha kolay hale gelir.

Giriş

  • CAF Gönderici, Android SDK yöneticisi kullanılarak Google Play Hizmetleri kapsamında dağıtılmaya devam etmektedir.
  • Google Cast Design yapılacaklar listesine (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. 2. sürümde herhangi bir kullanıcı arayüzü bileşeni sağlanmaz ve bu widget'ları uygulamanız gerekirdi.
  • Cast API'yi kullanmak için artık GoogleApiClient'i kullanmanız gerekmiyor.
  • CAF Gönderen'deki altyazı özelliği, v2'ye benzer.

Bağımlılıklar

V2 ve CAF, Destek Kitaplığı Özellikleri Kılavuzu'nda açıklandığı üzere destek kitaplıklarına ve Google Play Hizmetleri'ne (9.2.0 veya sonraki sürümler) aynı şekilde bağlıdır.

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, Web Alıcısı uygulama kimliğini ve diğer tüm genel seçenekleri belirtmek için uygun bir OptionsProvider kullanarak CastContext tekil nesneyi 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;
    }
}

Uygulama AndroidManifest.xml dosyasının "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 bir etkinliğin onCreate yönteminde CastContext öğesini yavaşça 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, 2. sürümde gerekli değildi.

Cihaz bulma

CAF'de, uygulama sırasıyla ön plana geldiğinde ve arka plana gittiğinde keşif işlemi ç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, MediaRouteButton tarafından hâlâ uygulanmaktadır ve menünüzdeki bir menü öğesi olarak etkinliğinize (ActionBar veya Toolbar kullanılarak) 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 öğesini kullanarak her bir Activity öğesinin 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ı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şlatma işlemlerini yapması gerekmez (ve bu işlemleri 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ır ve sonlandırır: Kullanıcı Cast iletişim kutusunda bir Cast cihazı seçtiğinde oturum başlatılır ve kullanıcı Cast iletişim kutusunda "Cast'i Durdur" düğmesine dokunduğunda veya gönderen uygulamanın kendisi sonlandırdığında oturum sonlandırılır. Gönderen uygulama, SessionManager ile SessionManagerListener kaydederek oturum yaşam döngüsü etkinlikleri hakkında bilgilendirilebilir. SessionManagerListener geri çağırma işlevleri, tüm oturum yaşam döngüsü etkinlikleri için geri çağırma yöntemlerini tanımlar.

CastSession sınıfı, Cast cihazıyla bir oturumu temsil eder. Sınıf, cihaz ses seviyesini ve sessize alma durumlarını kontrol etmek için yöntemlere sahiptir. Bu işlemler daha önce v2'de Cast.CastApi'teki yöntemler kullanılarak yapılıyordu.

2. sürümde, Cast.Listener geri çağırma işlevleri ses seviyesi, sessize alma durumu, bekleme durumu vb. dahil olmak üzere cihaz durumundaki değişikliklerle ilgili bildirimler sağladı.

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

Yeniden bağlantı mantığı

v2'de olduğu gibi CAF, 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. Oturum, bağlantı kaybedildiğinde "askıya alınmış" duruma girebilir ve bağlantı yeniden kurulduğunda "bağlı" duruma geri döner. Çerçeve, bu sürecin bir parçası olarak Web Alıcısı uygulamasına ve Cast kanallarına yeniden bağlanma işlemlerini gerçekleştirir.

Ayrıca CAF, varsayılan olarak etkin olan otomatik oturum devamını da ekler (ve CastOptions aracılığıyla devre dışı bırakılabilir). Gönderen uygulaması, Cast oturumu devam ederken arka plana gönderilirse veya kapatılırsa (kaydırma veya kilitlenme nedeniyle) çerçeve, gönderen uygulaması ön plana döndüğünde veya yeniden başlatıldığında bu oturumu devam ettirmeye çalışır. Bu işlem, kayıtlı tüm SessionManagerListener örneklerinde uygun geri çağırma çağrılarını gönderen SessionManager tarafından otomatik olarak yönetilir.

Özel kanal kaydı

2. sürümde, özel kanallar (Cast.MessageReceivedCallback kullanılarak uygulanır) Cast.CastApi ile kaydedilir. CAF'de ise özel kanallar CastSession örneğine kaydedilir. Kayıt, SessionManagerListener.onSessionStarted geri çağırma yöntemiyle yapılabilir. Medya uygulamaları için artık medya kontrol kanalını Cast.CastApi.setMessageReceivedCallbacks aracılığıyla açıkça kaydetmeniz gerekmiyor. Daha fazla bilgi için aşağıdaki bölüme bakın.

Medya kontrolü

RemoteMediaPlayer sınıfının v2 sürümü için destek sonlandırıldı ve bu sürüm kullanılmamalıdır. CAF'de, daha kullanışlı bir API'de eşdeğer işlevler sunan yeni RemoteMediaClient sınıfı ile değiştirilmiştir. Bu nesneyi açıkça başlatmak veya kaydettirmek gerekli değildir. Bağlantı kurulan Web Alıcı uygulaması medya ad alanını destekliyorsa çerçeve, nesneyi otomatik olarak oluşturur ve temel medya kanalını oturum başlangıç zamanında kaydeder.

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

V2'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'de, 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 RemoteMediaClient.MediaChannelResult döndürür.

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

CAF'de RemoteMediaClient, RemoteMediaClient.Listener arayüzü aracılığıyla eşdeğer geri çağırma işlevleri sağlar. RemoteMediaClient'ye istediğiniz sayıda dinleyici kaydedebilirsiniz. Bu sayede, birden fazla gönderen bileşeni oturumla ilişkili tek RemoteMediaClient örneğini paylaşabilir.

2. sürümde, gönderen uygulamanın kullanıcı arayüzünü web alıcısındaki medya oynatıcı durumuyla senkronize tutma yükü üstlenmesi gerekiyordu.

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

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

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

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 kontrol cihazı

2. sürümde, gönderen uygulamasına sıfırdan bir mini denetleyici uygulamanız gerekir.

CAF'de SDK, mini denetleyiciyi göstermek istediğiniz etkinliklerin uygulama düzeni dosyasına ekleyebileceğiniz MiniControllerFragment özel görünümü 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'de SDK, gönderen uygulamasına bildirim ve kilit ekranı için medya kontrolleri oluşturmanıza yardımcı olacak 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ş kontrol cihazı

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

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

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

Örnek uygulamalar

CAF kullanan codelab eğitimleri ve örnek uygulamalar'a sahibiz.