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.