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 öğesine dayalı CAF gönderenine dönüştürmenizi sağlar.

Cast CAF Sender SDK, GoogleAPIClient'ı sizin adınıza yönetmek için CastContext'i kullanır. CastContext, yaşam döngülerini, hataları ve geri çağırma yöntemlerini sizin için yönetir. Bu da Cast uygulaması geliştirmeyi büyük ölçüde kolaylaştırır.

Giriş

  • CAF Sender, Android SDK Yöneticisi kullanılarak Google Play Hizmetleri kapsamında dağıtılmaya devam ediyor.
  • Google Cast Tasarım yapılacaklar listesine (com.google.android.gms.cast.framework.*) uyma sorumluluğunu üstlenen yeni paketler eklendi.
  • CAF Sender, Cast kullanıcı deneyimi şartlarına uygun widget'lar sağlar. v2 ise 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'ın kullanılması gerekmiyor.
  • CAF Sender'daki altyazı özelliği, v2'deki altyazı özelliğine 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şlemde, CastContext singleton'ın başlatılması, Web alıcı uygulama kimliğini ve diğer tüm genel seçenekleri belirtmek için uygun bir OptionsProvider kullanı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;
    }
}

OptionsProvider dosyasının "application" etiketinde AndroidManifest.xml öğ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, uygulama ön plana geldiğinde ve arka plana gittiğinde sırasıyla çerçeve tarafından keşif süreci 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

Bu bileşenler, v2'de olduğu gibi 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 kullanılarak) ve menünüzdeki 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"/>

onCreateOptionMenu() yöntemini geçersiz kılın. Bunun için MediaRouteButton öğesini Cast çerçevesine bağlamak üzere CastButtonFactory kullanın: CastButtonFactory

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ın iletişim kutusu otomatik olarak gösterilir.

Cihaz kontrolü

CAF'de cihaz kontrolü büyük ölçüde çerçeve tarafından gerçekleştirilir. Gönderen uygulamanın, GoogleApiClient kullanarak cihaza bağlanma ve Web Receiver uygulamasını başlatma işlemlerini yapması gerekmez (ve yapmaya çalışmamalıdır). Gönderen ile Web Alıcı 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ın iletişim kutusunda bir yayın cihazı seçtiğinde oturum başlatılır ve kullanıcı, yayın iletişim kutusunda "Yayınlamayı Durdur" düğmesine dokunduğunda veya gönderen uygulama sonlandırıldığında oturum sona erer. Gönderen uygulama, SessionManager ile SessionManagerListener kaydederek 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ı, Cast cihazıyla oturumu temsil eder. Sınıfta, cihazın ses seviyesini ve sessiz durumlarını kontrol etmeye yönelik yöntemler bulunur. Bu işlemler daha önce v2'de Cast.CastApi üzerindeki yöntemler kullanılarak yapılıyordu.

v2'de, Cast.Listener geri çağırmaları, ses seviyesi, sessize alma durumu, bekleme durumu gibi 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öntemleriyle iletilmeye devam eder. Bu dinleyiciler CastSession ile kaydedilir. Geriye 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 gittiğinde dinleyicilerin kaydını kaldırmaya devam ettiğinizden emin olun.

Yeniden bağlanma mantığı

v2'de olduğu gibi, CAF de geçici kablosuz sinyal kaybı veya diğer ağ hataları nedeniyle kaybolan ağ bağlantılarını yeniden kurmaya çalışır. Bu işlem artık oturum düzeyinde yapılır. Bağlantı kaybedildiğinde oturum "askıya alınmış" duruma geçebilir ve bağlantı yeniden kurulduğunda "bağlı" duruma geri döner. Bu işlem sırasında çerçeve, Web Receiver uygulamasına ve Cast kanallarına yeniden bağlanmayı sağlar.

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. Bir yayın oturumu devam ederken gönderen uygulama arka plana gönderilirse veya sonlandırılırsa (kaydırarak kapatma ya da kilitlenme nedeniyle) çerçeve, gönderen uygulama ö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ğırmaları yayınlayan SessionManager tarafından otomatik olarak gerçekleştirilir.

Ö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 işlemi SessionManagerListener.onSessionStarted geri çağırma yönteminde yapılabilir. Medya uygulamaları için artık medya kontrol kanalının Cast.CastApi.setMessageReceivedCallbacks aracılığıyla açıkça kaydedilmesi gerekmiyor. Daha fazla bilgi için aşağıdaki bölüme bakın.

Medya kontrolü

v2 sınıfı RemoteMediaPlayer kullanımdan kaldırıldı ve kullanılmamalıdır. CAF'de, daha kullanışlı bir API'de eşdeğer işlevsellik sağlayan yeni RemoteMediaClient sınıfı tarafından geçersiz kılınmıştır. Bu nesnenin açıkça başlatılması veya kaydedilmesi gerekmez. Bağlanılan Web Alıcı uygulaması medya ad alanını destekliyorsa çerçeve, oturum başlangıç zamanında nesneyi otomatik olarak oluşturur ve temel alınan medya kanalını kaydeder.

RemoteMediaClient, CastSession nesnesinin getRemoteMediaClient yöntemi olarak kullanılabilir.

v2'de, RemoteMediaPlayer üzerinde verilen tüm medya istekleri, PendingResult geri araması aracılığıyla RemoteMediaPlayer.MediaChannelResult döndürür.

CAF'de RemoteMediaClient üzerinde verilen tüm medya istekleri, isteğin ilerleme durumunu ve nihai sonucunu izlemek için kullanılabilecek bir PendingResult geri çağırma yoluyla RemoteMediaClient.MediaChannelResult döndürür.

v2 RemoteMediaPlayer, RemoteMediaPlayer.OnStatusUpdatedListener aracılığıyla Web Alıcı'daki 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ğırmalar sağlar. Oturumla ilişkili RemoteMediaClient tek örneğini birden fazla gönderen bileşeninin paylaşmasına olanak tanıyan RemoteMediaClient ile herhangi bir sayıda dinleyici kaydedilebilir.

v2'de, gönderen uygulamasının kullanıcı arayüzünü Web alıcısındaki medya oynatıcı durumuyla senkronize tutma yükümlülüğü vardı.

CAF'de, bu sorumluluğun büyük bir kısmı sınıfı tarafından üstlenilir.UIMediaController

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ıya ilk kez gösterildiğinde Cast düğmesini vurgulamak için özel bir görünüm IntroductoryOverlay sağlar.

Mini kumanda

v2'de, gönderen uygulamasında mini denetleyiciyi sıfırdan uygulamanız gerekir.

CAF'de SDK, özel bir görünüm sağlar. MiniControllerFragment, Bu görünümü, mini denetleyiciyi göstermek istediğiniz etkinliklerin uygulama düzeni dosyasına ekleyebilirsiniz.

Bildirim ve kilit ekranı

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

CAF'de SDK, gönderen uygulamasında 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ş denetleyici

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

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

CAF, uygulamanıza kolayca ekleyebileceğiniz önceden oluşturulmuş genişletilmiş bir kontrol cihazı widget'ı ExpandedControllerActivity ekler. Artık UIMediaController kullanarak özel bir genişletilmiş kontrol cihazı 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çenekleri yoktur.

Örnek uygulamalar

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