Aşağıdaki prosedür, Android gönderen uygulamanızı CCL ile SDK v2'yi CAF'ye yayınlayın. CCL'nin tüm işlevleri CAF'de uygulanır. Bu nedenle, taşıma işleminden sonra CCL kullanmanız gerekmez.
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önetir. bir Cast uygulaması geliştirmeyi basitleştirir.
Giriş
- CAF Sender tasarımı, Cast Companion Kitaplığı'ndan etkilendiği için CCL'den CAF Sender'a taşıma işlemi çoğunlukla ve yöntemlerini inceleyeceğiz.
- CAF Sender, Google Play Hizmetleri'nin bir parçası olarak dağıtılmaya devam ediyor kullanarak e-posta gönderebilirsiniz.
- Baştan sona yeni paketler (
com.google.android.gms.cast.framework.*
) CAF Sender'a eklenen bu özellik, CCL'ye benzer işlevlerle uymakla yükümlüdür Google Cast Tasarımı kontrol listesi. - CAF Sender, Cast kullanıcı deneyimi şartlarına uygun widget'lar sağlar; bu widget'lar CCL tarafından sağlananlara benzer.
- CAF Gönderen; web sitesindeki verileri ve verileri nasıl alacağınızı öğreneceksiniz. CAF Sender, CCL'den farklı olarak ve çeşitli arayüz yöntemlerinin nasıl uygulandığını öğreneceksiniz.
İlerleyen bölümlerde, temel olarak video merkezli CCL'nin VideoCastManager'ına dayanır ancak çoğu durumda Kavramlar DataCastManager için de geçerlidir.
Bağımlılıklar
CCL ve CAF, AppCompat destek kitaplığında aynı bağımlılıklara sahiptir. MediaRouter v7 destek kitaplığı ve Google Play hizmetleri. Ancak aradaki fark CAF, Google Play'de bulunan yeni Cast çerçevesine bağlı. Hizmetler 9.2.0 veya sonraki sürümler için geçerlidir.
Build.gradle dosyanızda şu bağımlılıkları kaldırın:
com.google.android.gms:play-services-cast
ve
com.google.android.libraries.cast.companionlibrary:ccl
,
sonra yeni Cast çerçevesini ekleyin:
dependencies {
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:mediarouter-v7:23.4.0'
compile 'com.google.android.gms:play-services-cast-framework:9.4.0'
}
Google Play hizmeti meta verilerini de kaldırabilirsiniz:
<meta‐data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>
CAF kapsamındaki tüm hizmetler, etkinlikler ve kaynaklar otomatik olarak Uygulamanızın manifest dosyası ve kaynaklarıyla birleştirildi.
CAF'nin desteklediği minimum Android SDK sürümü 9'dur (Gingerbread); CCL'nin minimum Android SDK sürümü 10'dur.
CCL size kolaylık sağlayan bir yöntem sunar.
BaseCastManager.checkGooglePlayServices(activity)
gibi bir ürünle uyumlu bir
Google Play Hizmetleri'nin sürümü cihazda mevcut. CAF şunları yapmaz:
bunu Cast SDK'sının bir parçası olarak sağlar. Prosedürü uygulayın
Cihazlarda Google Play Hizmetleri APK'sının olduğundan emin olma
Google Play Hizmetleri APK'sının kullanıcının
Güncellemeler tüm kullanıcılara hemen ulaşmayabilir.
Uygulamanın tıklayın.
Başlatma
CCL için VideoCastManager.initialize()
öğesinin
Applications örneğinin onCreate()
yöntemi. Bu mantık
Uygulama sınıf kodunuzdan kaldırılır.
CAF'de, Cast için açık bir başlatma adımı da gereklidir
bahsedeceğim. Bu işlem, CastContext
single'ını bir
alıcı uygulama kimliğini ve alıcı uygulama kimliğini belirtmek için uygun OptionsProvider
diğer global seçenekler. CastContext
, CCL'lerinkine benzer bir rol oynar.
Müşterilerin etkileşim kurabileceği bir tek bağlantı sağlayarak VideoCastManager
.
OptionsProvider
, CCL'nin CastConfiguration
öğesine benzer niteliktedir. Böylece size
Cast çerçevesi özelliklerini yapılandırmak için kullanılır.
Mevcut CCL CastConfiguration.Builder
metriğiniz şu şekilde görünüyorsa:
VideoCastManager.initialize(
getApplicationContext(),
new CastConfiguration.Builder(context.getString(R.string.app_id))
.enableWifiReconnection()
.enableAutoReconnect()
.build());
Ardından CAF'de CastOptions.Builder
kullanılarak aşağıdaki CastOptionsProvider
şöyle olur:
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;
}
}
Örnek uygulamamıza göz atın Seçenekler Sağlayıcısı'nın eksiksiz bir şekilde uygulanması için gereklidir.
OptionProvider öğesini "application" (uygulama) içinde bildir elemanı AndroidManifest.xml dosyası:
<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 Activity
öğesinin onCreate
yönteminde CastContext
öğesini geç başlat
(Application
örneği değil):
private CastContext mCastContext;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video_browser);
setupActionBar();
mCastContext = CastContext.getSharedInstance(this);
}
CastContext
single'ına erişmek için:
mCastContext = CastContext.getSharedInstance(this);
Cihaz bulma
CCL'nin VideoCastManager
incrementUiCounter
ve decrementUiCounter
Activities
, onResume
ve onPause
yöntemlerinden kaldırılacak.
CAF'de keşif süreci Google Ads tarafından arka plana gittiğinde arka planda çalışır. tıklayın.
Yayınla düğmesi ve Yayınla iletişim kutusu
CCL'de olduğu gibi bu bileşenler MediaRouter v7 desteği tarafından sağlanır. kitaplığını açar.
Yayınla düğmesi MediaRouteButton
tarafından hâlâ kullanılıyor ve eklenebilir
etkinliğinize (ActionBar
veya Toolbar
kullanarak) bir menü öğesi olarak
kullanabilirsiniz.
XML menüsündeki MediaRouteActionProvider
bildirimi aynı
CCL ile:
<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"/>
CCL'ye benzer şekilde, her bir Etkinliğin onCreateOptionMenü() yöntemini geçersiz kılın ancak CastManager.addMediaRouterButton kullanmak yerine CAF'nin CastButtonFactory'yi kullanın MediaRouteButton'ı Cast çerçevesine bağlamak için:
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.browse, menu);
CastButtonFactory.setUpMediaRouteButton(getApplicationContext(),
menu,
R.id.media_route_menu_item);
return true;
}
Cihaz kontrolü
CCL'ye benzer şekilde CAF'de cihaz kontrolü de büyük ölçüde çerçeve tarafından yönetilir.
Gönderen uygulamanın,
cihaza bağlanıp alıcı uygulamayı başlatmak için
GoogleApiClient
Gönderen ve alıcı arasındaki etkileşim artık bir "oturum" olarak temsil edilmektedir. İlgili içeriği oluşturmak için kullanılan
SessionManager
sınıfı, oturum yaşam döngüsünü işler ve otomatik olarak başlar.
ve kullanıcı hareketlerine yanıt olarak oturumları durdurur:
Kullanıcı, Yayın iletişim kutusunda bir Yayın cihazı seçer ve kullanıcı dokunduğunda sona erer
"Yayını Durdur" düğmesini seçtiğinizde, yayın iletişim kutusunda veya gönderen uygulamasının kendisi
feshedilir.
CCL'de yayını takip etmek için VideoCastConsumerImpl
sınıfını genişletmeniz gerekir
oturum durumu:
private final VideoCastConsumer mCastConsumer = new VideoCastConsumerImpl() {
public void onApplicationConnected(ApplicationMetadata appMetadata,
String sessionId,
boolean wasLaunched) {}
public void onDisconnectionReason(int reason) {}
public void onDisconnected() {}
}
CAF'de gönderen uygulamaya, oturum yaşam döngüsü olayları hakkında
SessionManager
ile SessionManagerListener
kaydettirme. İlgili içeriği oluşturmak için kullanılan
SessionManagerListener geri çağırmaları tüm oturum için geri çağırma yöntemlerini tanımlar
yaşam döngüsü olayları.
Aşağıdaki SessionManagerListener
yöntem, CCL'lerden eşlenir
VideoCastConsumer
arayüzü:
VideoCastConsumer.onApplicationConnected
->SessionManagerListener.onSessionStarted
VideoCastConsumer.onDisconnected
->SessionManagerListener.onSessionEnded
SessionManagerListener
arayüzünü uygulayan bir sınıf bildir ve taşı
eşleştirme yöntemleri için VideoCastConsumerImpl
mantığı:
private class CastSessionManagerListener implements SessionManagerListener<CastSession> {
public void onSessionEnded(CastSession session, int error) {}
public void onSessionStarted(CastSession session, String sessionId) {}
public void onSessionEnding(CastSession session) {}
...
}
CastSession
sınıfı, yayın cihazı içeren bir oturumu temsil ediyor. Sınıfta
kontrol etmek için nasıl kullanacağınızı göstereceğim. CCL
BaseCastManager
Tüketici eklemek için CCL VideoCastManager
kullanmak yerine:
VideoCastManager.getInstance().addVideoCastConsumer(mCastConsumer);
Şimdi SessionManagerListener
cihazınızı kaydedin:
mCastSessionManager =
CastContext.getSharedInstance(this).getSessionManager();
mCastSessionManagerListener = new CastSessionManagerListener();
mCastSessionManager.addSessionManagerListener(mCastSessionManagerListener,
CastSession.class);
CCL'deki etkinlikleri dinlemeyi durdurmak için:
VideoCastManager.getInstance().removeVideoCastConsumer(mCastConsumer);
Şimdi SessionManager
uygulamasını kullanarak oturum etkinliklerini dinlemeyi durdurun:
mCastSessionManager.removeSessionManagerListener(mCastSessionManagerListener,
CastSession.class);
Yayın cihazıyla olan bağlantıyı açıkça kesmek için CCL şunları kullandı:
VideoCastManager.disconnectDevice(boolean stopAppOnExit,
boolean clearPersistedConnectionData,
boolean setDefaultRoute)
CAF için SessionManager
değerini kullanın:
CastContext.getSharedInstance(this).getSessionManager()
.endCurrentSession(true);
CCL, gönderenin alıcıyla bağlantılı olup olmadığını belirlemek için
VideoCastManager.getInstance().isConnected()
ancak CAF'de
SessionManager
:
public boolean isConnected() {
CastSession castSession = CastContext.getSharedInstance(mAppContext)
.getSessionManager()
.getCurrentCastSession();
return (castSession != null && castSession.isConnected());
}
CAF'de ses düzeyi/sesi durumu değişikliği bildirimleri, geri arama aracılığıyla teslim edilmeye devam eder
Cast.Listener
kapsamındaki yöntemler; kayıtlı olduğu kadar
CastSession
. Diğer cihaz durumu bildirimlerinin tümü
CastStateListener
geri arama; bu dinleyiciler de
CastSession
. İlişkili olduğunda dinleyicilerin kaydını iptal ettiğinizden emin olun.
parçaların, etkinliklerin veya uygulamaların arka plana gitmesini sağlayabilirsiniz.
Yeniden bağlanma mantığı
CAF, nedeniyle kaybedilen ağ bağlantılarını yeniden kurmaya çalışıyor kablosuz sinyal kaybı veya diğer ağ hatalarına neden olabilir. Bu artık oturum düzeyi; bir oturum "askıya alınmış" bağlantı kurulduğunda, kayboldu ve tekrar "bağlı" durumuna geçecek bağlantının kurulduğu durumdaki durum geri yüklendi. Çerçeve, alıcı uygulamanın yeniden bağlanmasını sağlar bu işlemin bir parçası olarak tüm Cast kanallarını yeniden bağlamanız gerekir.
CAF, kendi yeniden bağlantı hizmetini sağlar. Böylece,
manifest dosyanızdaki CCL ReconnectionService
bilgisini girin:
<service android:name="com.google.android.libraries.cast.companionlibrary.cast.reconnection.ReconnectionService"/>
Ayrıca, yeniden bağlanma mantığı:
<uses‐permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses‐permission android:name="android.permission.ACCESS_WIFI_STATE"/>
CAF yeniden bağlanma hizmeti varsayılan olarak etkindir, ancak
CastOptions
Ayrıca, CAF, bir kullanıcı tarafından etkinleştirilen otomatik oturum devam ettirme işlevi de ekler.
varsayılandır (ve CastOptions
aracılığıyla devre dışı bırakılabilir). Gönderen uygulama
Kullanıcı arka plana gönderilirse veya cihaz sonlandırılırsa (hızlıca kaydırılarak veya kilitlenme nedeniyle)
bir Cast oturumu devam ederken çerçeve, bunu devam ettirmeye çalışır.
Gönderen uygulaması ön plana geri döndüğünde veya yeniden başlatıldığında oturum;
bu işlem, SessionManager
tarafından otomatik olarak gerçekleştirilecek ve
kayıtlı SessionManagerListener
örneklerinde uygun geri çağırmalar yapılır.
Özel kanal kaydı
CCL, alıcıya yönelik özel bir mesaj kanalı oluşturmak için iki yol sunar:
CastConfiguration
birden fazla ad alanı belirtmenize olanak tanır ve CCL sizin için kanal oluşturun.DataCastManager
, VideoCastManager'a benzer ancak medya dışı içeriklere odaklanıyor örnekler üzerinden görüntüleyebilirsiniz.
Özel kanal oluşturma yöntemlerinin ikisi de CAF tarafından desteklenmez. talimatları uygulamak yerine Özel Kanal ekleme gönderin.
CCL'ye benzer şekilde, medya uygulamaları için de Medya kontrol kanalını kaydedin.
Medya kontrolü
CAF'de RemoteMediaClient
sınıfı VideoCastManager
ile eşdeğerdir
medya yöntemleri. RemoteMediaClient.Listener
, eşdeğerdir
VideoCastConsumer
yöntem. Özellikle,
onRemoteMediaPlayerMetadataUpdated
onRemoteMediaPlayerStatusUpdated
VideoCastConsumer
yöntemlerinin onMetadataUpdated
ve
Sırasıyla RemoteMediaClient.Listener
için onStatusUpdated
yöntem:
private class CastMediaClientListener implements RemoteMediaClient.Listener {
@Override
public void onMetadataUpdated() {
setMetadataFromRemote();
}
@Override
public void onStatusUpdated() {
updatePlaybackState();
}
@Override
public void onSendingRemoteMediaRequest() {
}
@Override
public void onQueueStatusUpdated() {
}
@Override
public void onPreloadStatusUpdated() {
}
}
RemoteMediaClient
öğesini açıkça başlatmanız veya kaydetmeniz gerekmez.
nesne; çerçeve, nesneyi otomatik olarak örneklendirir ve
alıcı uygulama ise oturum başlangıç zamanında temel medya kanalı
medya ad alanını destekler.
RemoteMediaClient
, öğesinin getRemoteMediaClient
yöntemi olarak erişilebilir
CastSession
nesnesini tanımlayın.
CastSession castSession = CastContext.getSharedInstance(mAppContext)
.getSessionManager()
.getCurrentCastSession();
mRemoteMediaClient = castSession.getRemoteMediaClient();
mRemoteMediaClientListener = new CastMediaClientListener();
CCL'ler yerine:
VideoCastManager.getInstance().addVideoCastConsumer(mCastConsumer);
Şimdi CAF'yi kullanın:
mRemoteMediaClient.addListener(mRemoteMediaClientListener);
RemoteMediaClient
, istediğiniz sayıda dinleyiciye
Bu, birden fazla gönderen bileşeninin tek bir
RemoteMediaClient
(oturumla ilişkilendirilen).
CCL'nin VideoCastManager
özelliği, medya oynatma işlemini işlemeye yönelik yöntemler sunar:
VideoCastManager manager = VideoCastManager.getInstance();
if (manager.isRemoteMediaLoaded()) {
manager.pause();
mCurrentPosition = (int) manager.getCurrentMediaPosition();
}
Bunlar artık CAF'de RemoteMediaClient tarafından uygulanmaktadır:
if (mRemoteMediaClient.hasMediaSession()) {
mRemoteMediaClient.pause();
mCurrentPosition =
(int)mRemoteMediaClient.getApproximateStreamPosition();
}
CAF'de, RemoteMediaClient
tarihinde yayınlanan tüm medya istekleri bir
PendingResult
geri araması ile RemoteMediaClient.MediaChannelResult
Bu, talebin ilerlemesini ve nihai sonucunu izlemek için kullanılabilir.
Hem CCL hem de CAF, değeri göstermek için MediaInfo
ve MediaMetadata
sınıflarını
medya öğelerini kullanabilirsiniz.
CCL'de medya yüklemek için VideoCastManager
kullanılır:
VideoCastManager.getInstance().loadMedia(media, autoPlay, mCurrentPosition, customData);
CAF'de RemoteMediaClient
, medyayı yüklemek için kullanılır:
mRemoteMediaClient.load(media, autoPlay, mCurrentPosition, customData);
Mevcut bir medya oturumunun Media
bilgilerini ve durumunu
alıcı, CCL VideoCastManager
kullanır:
MediaInfo mediaInfo = VideoCastManager.getInstance()
.getRemoteMediaInformation();
int status = VideoCastManager.getInstance().getPlaybackStatus();
int idleReason = VideoCastManager.getInstance().getIdleReason();
CAF'de aynı bilgileri almak için RemoteMediaClient
öğesini kullanın:
MediaInfo mediaInfo = mRemoteMediaClient.getMediaInfo();
int status = mRemoteMediaClient.getPlayerState();
int idleReason = mRemoteMediaClient.getIdleReason();
Tanıtım yer paylaşımı
CCL'ye benzer şekilde CAF de vurgulanacak özel bir görünüm IntroductoryOverlay
sağlar
kullanıcılara ilk kez gösterildiğinde Yayınla düğmesi.
CCL'nin VideoCastConsumer
onCastAvailabilityChanged
yöntemini kullanmak yerine
yer paylaşımını ne zaman görüntüleyeceğini belirlemek için bir CastStateListener
bildiriminde bulunun.
Google Cast düğmesi görünür hale geldiğinde,
yerel ağ: MediaRouter
private IntroductoryOverlay mIntroductoryOverlay;
private MenuItem mMediaRouteMenuItem;
protected void onCreate(Bundle savedInstanceState) {
...
mCastStateListener = new CastStateListener() {
@Override
public void onCastStateChanged(int newState) {
if (newState != CastState.NO_DEVICES_AVAILABLE) {
showIntroductoryOverlay();
}
}
};
mCastContext = CastContext.getSharedInstance(this);
mCastContext.registerLifecycleCallbacksBeforeIceCreamSandwich(this,
savedInstanceState);
}
protected void onResume() {
mCastContext.addCastStateListener(mCastStateListener);
...
}
protected void onPause() {
mCastContext.removeCastStateListener(mCastStateListener);
...
}
MediaRouteMenuItem
örneğini takip edin:
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.browse, menu);
mMediaRouteMenuItem = CastButtonFactory.setUpMediaRouteButton(
getApplicationContext(), menu,
R.id.media_route_menu_item);
showIntroductoryOverlay();
return true;
}
Tanıtım yer paylaşımının gösterilmesi için MediaRouteButton
öğesinin görünür olup olmadığını kontrol edin
şunlar gösterilebilir:
private void showIntroductoryOverlay() {
if (mIntroductoryOverlay != null) {
mIntroductoryOverlay.remove();
}
if ((mMediaRouteMenuItem != null) && mMediaRouteMenuItem.isVisible()) {
new Handler().post(new Runnable() {
@Override
public void run() {
mIntroductoryOverlay = new IntroductoryOverlay.Builder(
VideoBrowserActivity.this, mMediaRouteMenuItem)
.setTitleText(getString(R.string.introducing_cast))
.setOverlayColor(R.color.primary)
.setSingleTime()
.setOnOverlayDismissedListener(
new IntroductoryOverlay
.OnOverlayDismissedListener() {
@Override
public void onOverlayDismissed() {
mIntroductoryOverlay = null;
}
})
.build();
mIntroductoryOverlay.show();
}
});
}
}
Şu bölüme göz atın: örnek uygulama giriş yer paylaşımını gösteren çalışma kodunun tamamı için.
Tanıtım yer paylaşımının stilini özelleştirmek için aşağıdaki prosedürü izleyin: Tanıtım Yer Paylaşımını özelleştirin.
Mini kumanda
CCL MiniController
yerine CAF MiniControllerFragment
kullanın
miniyi göstermek istediğiniz etkinliklerin uygulama düzen dosyası
denetleyici:
<fragment
android:id="@+id/cast_mini_controller"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:castShowImageThumbnail="true"
android:visibility="gone"
class="com.google.android.gms.cast.framework.media.widget.MiniControllerFragment" />
CAF, CCL'nin MiniController
tarafından desteklenen manuel yapılandırmayı desteklemiyor
ve Autoplay
özelliğini desteklemez.
Mini kumandanın stilini ve düğmelerini özelleştirmek için ameliyat Mini Kumanda'yı özelleştirin.
Bildirim ve kilit ekranı
CCL'nin VideoCastNotificationService
çözümüne benzer şekilde, CAF bir
Medya bildirimlerinin görünümünü yönetmek için MediaNotificationService
yayın sırasında.
Aşağıdakileri manifest dosyanızdan kaldırmanız gerekiyor:
VideoIntentReceiver
VideoCastNotificationService
CCL,
CastConfiguration.Builder
; bu reklam biçiminin desteklenmediğini varsayalım.
CCL kullanarak CastManager
ilk kullanıma hazırlamayı deneyin:
VideoCastManager.initialize(
getApplicationContext(),
new CastConfiguration.Builder(
context.getString(R.string.app_id))
.addNotificationAction(
CastConfiguration.NOTIFICATION_ACTION_PLAY_PAUSE,true)
.addNotificationAction(
CastConfiguration.NOTIFICATION_ACTION_DISCONNECT,true)
.build());
SDK, CAF'deki eşdeğer yapılandırma için
NotificationsOptions.Builder
bildirimi ve kilit ekranını gönderen uygulamasına
yükleyebilirsiniz. Bildirim ve kilit
ilk kullanıma hazırlanırken ekran denetimleri CastOptions
ile etkinleştirilebilir
CastContext
.
public CastOptions getCastOptions(Context context) {
NotificationOptions notificationOptions =
new NotificationOptions.Builder()
.setActions(Arrays.asList(
MediaIntentReceiver.ACTION_TOGGLE_PLAYBACK,
MediaIntentReceiver.ACTION_STOP_CASTING), new int[]{0, 1})
.build();
CastMediaOptions mediaOptions = new CastMediaOptions.Builder()
.setNotificationOptions(notificationOptions)
.build();
return new CastOptions.Builder()
.setReceiverApplicationId(context.getString(R.string.app_id))
.setCastMediaOptions(mediaOptions)
.build();
}
CAF'de bildirimler ve kilit ekranı kontrolleri her zaman etkindir. Ayrıca,
oynatma/duraklatma ve yayını durdurma düğmeleri varsayılan olarak sağlanır. CAF
karar vermek için Etkinliklerin görünürlüğünü otomatik olarak izler.
Gingerbread hariç medya bildiriminin ne zaman görüntüleneceğini belirler.
(Gingerbread için şurada önceki nota bakın:
registerLifecycleCallbacksBeforeIceCreamSandwich()
kullanılıyor; CCL'ler
VideoCastManager
incrementUiCounter
ve decrementUiCounter
araması
kaldırılmalıdır.)
Bildirimlerde görüntülenen düğmeleri özelleştirmek için şu talimatları uygulayın: ameliyat Bildirim ve Kilit Ekranına Medya Denetimleri ekleyin.
Genişletilmiş denetleyici
CCL, VideoCastControllerActivity
ve VideoCastControllerFragment
sağlar
görüntüleyebilirsiniz.
Manifest'ten VideoCastControllerActivity
beyanını kaldırabilirsiniz.
CAF'de şunları yapmanız gerekir: GenişletilmişControllerActivity öğesini genişletin ve Yayınla düğmesini ekleyin.
Genişletilmiş aşağıdaki adımları izleyin, Genişletilmiş Denetleyici'yi özelleştirin.
Ses odağı
CCL'de olduğu gibi ses odağı otomatik olarak yönetilir.
Ses düzeyi kontrolü
Gingerbread için de CCL'de olduğu gibi dispatchKeyEvent
gereklidir. ICS ve üzeri
hem CCL hem de CAF ses düzeyi denetimi otomatik olarak işlenir.
CAF, yayın ses düzeyinin cihazındaki sabit ses düğmesiyle kontrol edilmesini sağlar. ve ayrıca, etkinleştirildiğinde bir görsel ses çubuğu yayınlama özelliğini destekler. CAF ayrıca uygulamanız önde değilken, kilitli olsa bile veya ekran kapalıyken bile sabit ses kapalı.
Altyazılar
Android KitKat ve sonraki sürümlerde altyazılar, Altyazılar aracılığıyla özelleştirilebilir Ayarlar'a gidin ve Ayarlar > Erişilebilirlik. Android'in önceki sürümleri, ancak bu özelliğe sahip değildir. CCL bunun yerine özel ve KitKat'ın sistem ayarlarına erişim yetkisi verme ve üzeri.
CAF, altyazı tercihlerini değiştirmek için özel ayarlar sağlamaz. Siz
manifest dosyanızdaki CaptionsPreferenceActivity
referanslarını kaldırmalıdır
ve tercihlerinizin XML'idir.
Kapatılan e-posta adresi değiştirildiğinden CCL'nin TracksChooserDialog
değeri artık gerekli değil
Altyazı kanalları, genişletilmiş denetleyici kullanıcı arayüzü tarafından işlenir.
closed captioning API v2'ye benzerdir.
Hata ayıklama günlük kaydı
CAF, hata ayıklama günlük kaydı ayarları sağlamaz.
Çeşitli
Aşağıdaki CCL özellikleri CAF'de desteklenmez:
- Bir
MediaAuthService
sağlayarak oynatmadan önce yetkilendirme alma - Yapılandırılabilir kullanıcı arayüzü mesajları
Örnek uygulamalar
Universal Music Player for Android (uamp) örnek uygulamamızı CCL'den CAF'ye taşımanın farklarına bakın.
Ayrıca, CAF kullanan codelab eğiticilerimiz ve örnek uygulamalarımız da mevcuttur.