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 Sender SDK, GoogleAPIClient'ı sizin adınıza yönetmek için CastContext'i kullanır. CastContext sizin için yaşam döngülerini, hataları ve geri çağırmaları yöneterek Cast uygulaması geliştirmeyi büyük ölçüde basitleştirir.

Giriş

  • CAF Sender, Android SDK yöneticisi kullanılarak Google Play Hizmetleri'nin bir parçası olarak dağıtılmaya devam ediyor
  • Google Cast Tasarım kontrol listesine (com.google.android.gms.cast.framework.*) uyma sorumluluğunu üstlenen yeni paketler eklendi.
  • CAF Sender, Cast kullanıcı deneyimi gereksinimlerine uyan widget'lar sağlar. v2, herhangi bir kullanıcı arayüzü bileşeni sağlamadığından bu widget'ları uygulamanızı gerektiriyordu.
  • Cast API'yi kullanmak için artık GoogleApiClient kullanılması gerekmiyor.
  • CAF Sender'daki altyazılar, v2'ye benzer.

Bağımlılıklar

V2 ve CAF, destek kitaplıklarına ve Google Play hizmetlerine (9.2.0 veya sonraki sürümler) Destek Kitaplığı Özellikleri Kılavuzu'nda açıklandığı gibi 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. Bunun için teklinin CastContext, Web Alıcısı uygulama kimliğini ve diğer genel seçenekleri belirtmek için uygun bir OptionsProvider kullanılarak başlatılması gerekir.

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 uygulamasının "application" etiketinde OptionsProvider 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 bir 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, uygulama ön plana gelip arka plana gittiğinde keşif süreci ç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 de MediaRouter destek kitaplığı tarafından sağlanır.

Yayınla düğmesi MediaRouteButton tarafından uygulanmaya devam eder ve ActionBar veya Toolbar kullanarak) menünüzde menü öğesi olarak 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 öğ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;
}

Birisi 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 uygulamasının, cihaza bağlanma ve Web Alıcısı uygulamasını GoogleApiClient kullanarak başlatma gerçekleştirmesi (ve bunu yapmaya çalışmaması) gerekmez. Gönderen ile Web Alıcısı arasındaki etkileşim artık "oturum" olarak gösteriliyor. 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ınlama iletişim kutusunda bir Yayın cihazı seçtiğinde bir oturum başlatılır ve kullanıcı Yayınlama iletişim kutusundaki "Yayını Durdur" düğmesine dokunduğunda veya gönderen uygulamanın kendisi sonlandığında sona erer. Gönderen uygulama, SessionManager ile bir SessionManagerListener kaydettirerek oturum yaşam döngüsü olayları hakkında bilgilendirilebilir. 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ı, Yayın cihazı içeren bir oturumu temsil eder. Sınıfta, cihaz sesini ve ses kapatma durumlarını kontrol etmek için kullanılabilecek yöntemler vardır. Bu, daha önce Cast.CastApi üzerindeki yöntemler kullanılarak v2'de yapılmaktadır.

Cast.Listener geri çağırmaları v2'de ses düzeyi, sesi kapatma durumu, bekleme durumu gibi cihaz durumunda yapılan değişiklikler hakkında bildirimler sağlıyordu.

CAF'de ses düzeyi/sessiz durum değişikliği bildirimleri, Cast.Listener içindeki geri çağırma yöntemleriyle sunulmaya devam eder. Bu işleyiciler CastSession ile kaydedilir. Kalan cihaz durumu bildirimlerinin tümü CastStateListener geri çağırmaları aracılığıyla gönderilir. Bu dinleyiciler CastSession'a kayıtlıdır. İlişkili parçalar, etkinlikler veya uygulamalar arka plana gittiğinde dinleyicilerin kaydını hâlâ iptal ettiğinizden emin olun.

Yeniden bağlantı mantığı

v2'de olduğu gibi CAF, geçici kablosuz ağ 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 yapılır. Bağlantı koptuğunda oturum "askıya alındı" durumuna geçebilir ve bağlantı tekrar sağlandığında "bağlı" durumuna geri döner. Çerçeve, bu süreç kapsamında Web Alıcısı uygulamasına yeniden bağlanmayı ve tüm Cast kanallarını yeniden bağlamayı üstlenir.

Ayrıca CAF'ye otomatik oturum devam ettirme özelliği de eklenir. Bu özellik varsayılan olarak etkindir ve CastOptions aracılığıyla devre dışı bırakılabilir. Yayın oturumu devam ederken gönderen uygulama arka plana gönderilirse veya sonlandırılırsa (kaydırma nedeniyle veya bir kilitlenme nedeniyle) gönderen uygulama ön plana döndüğünde veya yeniden başlatıldığında çerçeve, bu oturumu devam ettirmeye çalışır. Bu işlem otomatik olarak SessionManager tarafından gerçekleştirilir ve kayıtlı SessionManagerListener örneklerinde uygun geri çağırmalar yapılır.

Özel kanal kaydı

v2'de, özel kanallar (Cast.MessageReceivedCallback kullanılarak uygulanan) 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ında, medya kontrol kanalının Cast.CastApi.setMessageReceivedCallbacks üzerinden açıkça kaydedilmesine gerek yoktur; daha ayrıntılı bilgi için aşağıdaki bölüme bakın.

Medya kontrolü

RemoteMediaPlayer v2 sınıfı kullanımdan kaldırıldı ve kullanılmamalıdır. CAF'de bu yaklaşımın yerini, daha uygun bir API'de eşdeğer işlevler sunan yeni RemoteMediaClient sınıfı almıştır. Bu nesnenin açıkça ilk kullanıma hazırlanması veya kaydedilmesine gerek yoktur. Bağlanan Web Alıcısı uygulaması medya ad alanını destekliyorsa çerçeve, nesneyi otomatik olarak somutlaştırır ve temel medya kanalını oturumun başlangıç zamanında 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ı yoluyla bir RemoteMediaPlayer.MediaChannelResult döndürür.

CAF'de, RemoteMediaClient üzerinde 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 ilerleme durumunu ve nihai sonucunu izlemek için kullanılabilir.

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

CAF'te RemoteMediaClient, RemoteMediaClient.Listener arayüzü üzerinden eşdeğer geri çağırmalar sağlar. RemoteMediaClient özelliğine istediğiniz sayıda işleyici kaydedilebilir. Böylece birden fazla gönderen bileşeni, oturumla ilişkili tek RemoteMediaClient örneğini paylaşabilir.

v2'de, gönderen uygulama, kullanıcı arayüzünü Web Alıcısı'ndaki medya oynatıcı durumu ile senkronize tutma yükünü üstlenmek zorundaydı.

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

Tanıtım yer paylaşımı

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

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

Mini kumanda

v2'de gönderen uygulamasına sıfırdan bir mini kumanda uygulamanız gerekir.

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

Bildirim ve kilit ekranı

v2'de bildirim ve kilit ekranı için denetleyiciler 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 uygulamada bildirim ve kilit ekranı için medya kontrolleri oluşturmanıza yardımcı olacak bir NotificationsOptions.Builder sağlar. CastContext başlatılırken bildirim ve kilit ekranı kontrolleri 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

v2'de gönderen uygulamasına 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ı sunar.

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

Ses odağı

v2'de 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 bulunmaktadır.