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.