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.