Prosedur berikut memungkinkan Anda mengonversi aplikasi pengirim Android dari Cast SDK v2 ke CAF Sender, yang didasarkan pada singleton CastContext.
SDK Pengirim CAF Cast menggunakan CastContext untuk mengelola GoogleAPIClient atas nama Anda. CastContext mengelola siklus proses, error, dan callback untuk Anda, sehingga sangat menyederhanakan pengembangan aplikasi Cast.
Pengantar
- Pengirim CAF masih didistribusikan sebagai bagian dari layanan Google Play menggunakan Android SDK Manager
- Paket baru telah ditambahkan untuk bertanggung jawab mematuhi
checklist Desain Google Cast (
com.google.android.gms.cast.framework.*
) - CAF Sender menyediakan widget yang sesuai dengan persyaratan UX Cast; v2 tidak menyediakan komponen UI apa pun dan mengharuskan Anda menerapkan widget ini.
- Penggunaan GoogleApiClient tidak lagi diperlukan untuk menggunakan Cast API.
- Pemberian teks tertutup dalam Pengirim CAF serupa dengan v2.
Dependensi
V2 dan CAF memiliki dependensi yang sama pada support library dan layanan Google Play (9.2.0 atau yang lebih baru) seperti yang dijelaskan dalam Panduan Fitur Support Library
Versi Android SDK minimum yang didukung CAF adalah 9 (Gingerbread).
Inisialisasi
Dalam CAF, langkah inisialisasi eksplisit diperlukan untuk framework Cast. Proses ini
melibatkan inisialisasi
singleton CastContext
, menggunakan OptionsProvider
yang sesuai untuk menentukan ID aplikasi Penerima Web dan opsi global lainnya.
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;
}
}
Deklarasikan OptionsProvider
dalam tag "aplikasi" file
AndroidManifest.xml
aplikasi:
<application>
...
<meta-data
android:name=
"com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="com.google.sample.cast.refplayer.CastOptionsProvider" />
</application>
Lakukan inisialisasi CastContext
dengan lambat di setiap metode onCreate
Aktivitas:
private CastContext mCastContext;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video_browser);
setupActionBar();
mCastContext = CastContext.getSharedInstance(this);
}
Langkah-langkah ini tidak diperlukan di v2.
Penemuan perangkat
Dalam CAF, proses penemuan dimulai dan dihentikan secara otomatis oleh
framework, saat aplikasi muncul di latar depan dan masing-masing
berpindah ke latar belakang. MediaRouteSelector
dan MediaRouter.Callback
tidak boleh
digunakan.
Tombol Cast dan dialog Cast
Seperti pada v2, komponen ini disediakan oleh support library MediaRouter.
Tombol Cast masih diimplementasikan oleh
MediaRouteButton
dan dapat ditambahkan ke aktivitas Anda (menggunakan
ActionBar
atau
Toolbar
),
sebagai item menu di menu Anda.
<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"/>
Ganti metode onCreateOptionMenu()
setiap Aktivitas dengan menggunakan
CastButtonFactory
untuk menghubungkan MediaRouteButton
ke framework Cast:
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;
}
Ketika seseorang mengetuk tombol, dialog Transmisi akan otomatis ditampilkan.
Kontrol perangkat
Dalam CAF, kontrol perangkat sebagian besar ditangani oleh framework. Aplikasi
pengirim tidak perlu menangani (dan tidak boleh mencoba menangani) koneksi ke
perangkat dan meluncurkan aplikasi Penerima Web menggunakan
GoogleApiClient
. Interaksi antara pengirim dan Penerima Web kini direpresentasikan
sebagai "sesi". Class
SessionManager
menangani siklus proses sesi dan secara otomatis memulai dan menghentikan sesi
sebagai respons terhadap gestur pengguna: sesi dimulai saat pengguna memilih perangkat
Transmisi pada dialog Cast dan berakhir saat pengguna mengetuk tombol "Hentikan Transmisi"
di dialog Cast atau saat aplikasi pengirim itu sendiri dihentikan. Aplikasi pengirim dapat diberi tahu tentang peristiwa siklus proses sesi dengan mendaftarkan SessionManagerListener
ke SessionManager
. Callback SessionManagerListener
menentukan
metode callback untuk semua peristiwa siklus proses sesi.
Class
CastSession
mewakili sesi dengan perangkat Transmisi. Class ini memiliki metode untuk
mengontrol volume perangkat dan status pembisuan, yang sebelumnya dilakukan di v2
menggunakan metode pada Cast.CastApi
.
Di v2, callback
Cast.Listener
memberikan notifikasi tentang perubahan status perangkat, termasuk
volume, status bisukan, status standby, dan sebagainya.
Dalam CAF, notifikasi perubahan status volume/bisukan tetap dikirim melalui metode
callback di Cast.Listener
; pemroses ini terdaftar dengan
CastSession
.
Semua notifikasi status perangkat yang tersisa dikirim melalui
callback
CastStateListener
;
pemroses ini terdaftar dengan CastSession
. Pastikan Anda tetap
membatalkan pendaftaran pemroses saat fragmen, aktivitas, atau aplikasi terkait berpindah
ke latar belakang.
Logika menghubungkan kembali
Seperti pada v2, CAF mencoba menghubungkan kembali koneksi jaringan yang hilang karena kehilangan sinyal Wi-Fi sementara atau error jaringan lainnya. Hal ini sekarang dilakukan di tingkat sesi; sesi dapat memasuki status "ditangguhkan" saat koneksi terputus, dan akan beralih kembali ke status "terhubung" saat konektivitas dipulihkan. Framework ini menangani penyambungan kembali ke aplikasi Penerima Web dan menghubungkan kembali saluran Cast sebagai bagian dari proses ini.
Selain itu, CAF juga menambahkan melanjutkan sesi otomatis yang diaktifkan secara
default (dan dapat dinonaktifkan melalui
CastOptions
.
Jika aplikasi pengirim dikirim ke latar belakang atau dihentikan (dengan
menggeser atau karena error) saat sesi Cast sedang berlangsung, framework akan mencoba melanjutkan sesi tersebut saat aplikasi pengirim
kembali ke latar depan atau diluncurkan kembali; ini ditangani secara otomatis oleh
SessionManager
, yang akan mengeluarkan callback yang sesuai pada instance
SessionManagerListener
yang terdaftar.
Pendaftaran saluran khusus
Pada v2, saluran khusus (diimplementasikan menggunakan
Cast.MessageReceivedCallback
)
terdaftar dengan Cast.CastApi
. Dalam CAF, saluran khusus didaftarkan dengan
instance CastSession
. Pendaftaran dapat dilakukan di metode callback
SessionManagerListener.onSessionStarted
. Untuk aplikasi media, Anda tidak perlu lagi mendaftarkan
saluran kontrol media secara eksplisit melalui Cast.CastApi.setMessageReceivedCallbacks
;
lihat bagian berikut untuk detail selengkapnya.
Kontrol media
Class v2
RemoteMediaPlayer
tidak digunakan lagi dan tidak boleh digunakan. Dalam CAF, peristiwa tersebut digantikan oleh class
RemoteMediaClient
baru, yang menyediakan fungsi setara di API yang lebih praktis. Anda tidak perlu melakukan inisialisasi atau mendaftarkan objek ini secara eksplisit. framework akan otomatis membuat instance objek dan mendaftarkan saluran media yang mendasarinya pada waktu mulai sesi jika aplikasi Penerima Web yang terhubung mendukung namespace media.
RemoteMediaClient
dapat diakses sebagai
metode getRemoteMediaClient
dari objek CastSession
.
Di v2, semua permintaan media yang dikeluarkan pada RemoteMediaPlayer
akan menampilkan RemoteMediaPlayer.MediaChannelResult
melalui callback PendingResult
.
Dalam CAF, semua permintaan media yang dikeluarkan pada RemoteMediaClient
menampilkan
RemoteMediaClient.MediaChannelResult
melalui
callback PendingResult
yang dapat digunakan untuk melacak progres dan hasil
permintaan.
RemoteMediaPlayer
v2 akan mengirimkan notifikasi tentang perubahan status
pemutar media di Penerima Web melalui
RemoteMediaPlayer.OnStatusUpdatedListener
.
Dalam CAF, RemoteMediaClient
menyediakan callback yang setara melalui
antarmuka
RemoteMediaClient.Listener
. Sejumlah pemroses dapat didaftarkan dengan
RemoteMediaClient
, yang memungkinkan beberapa komponen pengirim berbagi
satu instance RemoteMediaClient
yang terkait dengan sesi.
Pada v2, aplikasi pengirim harus menanggung beban untuk menjaga sinkronisasi antarmuka pengguna dengan status pemutar media di Penerima Web.
Di CAF, class
UIMediaController
memegang sebagian besar tanggung jawab ini.
Overlay perkenalan
V2 tidak menyediakan UI overlay pengantar.
CAF memberikan tampilan kustom
IntroductoryOverlay
untuk menandai tombol Cast saat pertama kali ditampilkan kepada pengguna.
Pengontrol mini
Di v2, Anda perlu mengimplementasikan pengontrol mini dari awal di aplikasi pengirim.
Dalam CAF, SDK menyediakan tampilan kustom,
MiniControllerFragment
,
yang dapat Anda tambahkan ke file tata letak aplikasi dari aktivitas tempat
Anda ingin menampilkan pengontrol mini.
Notifikasi dan layar kunci
Di v2, pengontrol untuk notifikasi dan layar kunci tidak disediakan oleh SDK. Untuk SDK tersebut, Anda harus mem-build fitur ini ke dalam aplikasi pengirim menggunakan API framework Android.
Dalam CAF, SDK menyediakan
NotificationsOptions.Builder
untuk membantu Anda membuat kontrol media untuk notifikasi dan layar kunci
ke dalam aplikasi pengirim. Notifikasi dan kontrol layar kunci dapat diaktifkan
dengan
CastOptions
saat melakukan inisialisasi CastContext
.
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();
}
Pengontrol yang diperluas
Pada v2, Anda perlu mengimplementasikan pengontrol yang diperluas dari awal di aplikasi pengirim.
CAF menyediakan class bantuan
UIMediaController
yang memudahkan Anda membuat pengontrol yang diperluas
sendiri.
CAF menambahkan widget pengontrol bawaan yang diperluas
ExpandedControllerActivity
yang dapat langsung Anda tambahkan ke aplikasi. Anda tidak perlu lagi
mengimplementasikan pengontrol kustom yang diperluas menggunakan UIMediaController
.
Fokus audio
Di v2, Anda perlu menggunakan MediaSessionCompat
untuk mengelola fokus audio.
Dalam CAF, fokus audio dikelola secara otomatis.
Logging debug
Dalam CAF, tidak ada opsi logging.
Aplikasi contoh
Kami memiliki tutorial codelab dan aplikasi contoh yang menggunakan CAF.