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.