Quy trình sau đây cho phép bạn chuyển đổi ứng dụng gửi Android từ Cast SDK v2 sang CAF Sender, dựa trên singleton CastContext.
SDK gửi CAF của Cast sử dụng CastContext để quản lý GoogleAPIClient thay cho bạn. CastContext quản lý vòng đời, lỗi và lệnh gọi lại cho bạn, giúp đơn giản hoá đáng kể việc phát triển một ứng dụng Cast.
Giới thiệu
- CAF Sender vẫn được phân phối như một phần của Dịch vụ Google Play bằng trình quản lý SDK Android
- Các gói mới đã được thêm vào để chịu trách nhiệm tuân thủ
danh sách kiểm tra của Google Cast Design (
com.google.android.gms.cast.framework.*
) - Trình gửi CAF cung cấp các tiện ích tuân thủ các yêu cầu của Cast UX; phiên bản 2 không cung cấp bất kỳ thành phần giao diện người dùng nào và yêu cầu bạn triển khai các tiện ích này.
- Bạn không cần phải sử dụng GoogleApiClient để sử dụng Cast API nữa.
- Phụ đề chi tiết trong CAF Sender tương tự như phiên bản 2.
Phần phụ thuộc
Phiên bản 2 và CAF có cùng phần phụ thuộc trên thư viện hỗ trợ và Dịch vụ Google Play (9.2.0 trở lên) như mô tả tại Hướng dẫn về tính năng của Thư viện hỗ trợ
Phiên bản SDK Android tối thiểu mà CAF hỗ trợ là 9 (Gingerbread).
Khởi chạy
Trong CAF, bạn cần có bước khởi chạy rõ ràng cho khung Truyền. Quá trình này bao gồm việc khởi chạy singleton CastContext
, sử dụng một OptionsProvider
thích hợp để chỉ định mã ứng dụng của Trình thu web và mọi tuỳ chọn chung khác.
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;
}
}
Khai báo OptionsProvider
trong thẻ "application" của tệp AndroidManifest.xml
trong ứng dụng:
<application>
...
<meta-data
android:name=
"com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="com.google.sample.cast.refplayer.CastOptionsProvider" />
</application>
Khởi chạy từng phần CastContext
trong phương thức onCreate
của mỗi Hoạt động:
private CastContext mCastContext;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video_browser);
setupActionBar();
mCastContext = CastContext.getSharedInstance(this);
}
Các bước này là không cần thiết trong phiên bản 2.
Khám phá thiết bị
Trong CAF, quá trình khám phá được khung tự động bắt đầu và dừng khi ứng dụng chuyển sang nền trước và chuyển sang chế độ nền lần lượt. Bạn không nên sử dụng MediaRouteSelector
và MediaRouter.Callback
.
Nút Truyền và hộp thoại Truyền
Như trong phiên bản 2, các thành phần này do thư viện hỗ trợ MediaRouter cung cấp.
Nút Truyền vẫn được MediaRouteButton
triển khai và có thể được thêm vào hoạt động của bạn (bằng cách sử dụng ActionBar
hoặc Toolbar
) dưới dạng một mục trong trình đơn trong trình đơn của bạn.
<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"/>
Ghi đè phương thức onCreateOptionMenu()
của từng Hoạt động bằng cách sử dụng CastButtonFactory
để kết nối MediaRouteButton
với khung Truyề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;
}
Khi ai đó nhấn vào nút này, hộp thoại Truyền tự động hiển thị.
Điều khiển thiết bị
Trong CAF, việc kiểm soát thiết bị phần lớn do khung xử lý. Ứng dụng của người gửi không cần xử lý (và không nên cố xử lý) kết nối với thiết bị và chạy ứng dụng Trình nhận web bằng GoogleApiClient
. Hoạt động tương tác giữa người gửi và Trình nhận web hiện được biểu thị dưới dạng một "phiên". Lớp SessionManager
xử lý vòng đời phiên, tự động bắt đầu và dừng các phiên theo cử chỉ của người dùng: một phiên bắt đầu khi người dùng chọn thiết bị Truyền trong hộp thoại Truyền và kết thúc khi người dùng nhấn vào nút "Dừng truyền" trong hộp thoại Truyền hoặc khi chính ứng dụng gửi chấm dứt. Ứng dụng gửi có thể được thông báo về các sự kiện trong vòng đời của phiên bằng cách đăng ký SessionManagerListener
với SessionManager
. Lệnh gọi lại SessionManagerListener
xác định phương thức gọi lại cho tất cả các sự kiện trong vòng đời của phiên.
Lớp CastSession
biểu thị một phiên có Thiết bị truyền. Lớp này có các phương thức để kiểm soát âm lượng thiết bị và trạng thái tắt tiếng, trước đây được thực hiện trong phiên bản 2 bằng các phương thức trên Cast.CastApi
.
Trong phiên bản 2, lệnh gọi lại Cast.Listener
cung cấp thông báo về các thay đổi đối với trạng thái thiết bị, bao gồm âm lượng, trạng thái tắt tiếng, trạng thái chờ, v.v.
Trong CAF, thông báo về thay đổi trạng thái âm lượng/tắt tiếng vẫn được gửi qua phương thức gọi lại trong Cast.Listener
; những trình nghe này được đăng ký bằng CastSession
.
Tất cả thông báo về trạng thái thiết bị còn lại đều được gửi qua lệnh gọi lại CastStateListener
; những trình nghe này được đăng ký với CastSession
. Hãy đảm bảo bạn vẫn huỷ đăng ký trình nghe khi các mảnh, hoạt động hoặc ứng dụng liên quan chuyển sang chạy ở chế độ nền.
Logic kết nối lại
Tương tự như phiên bản 2, CAF cố gắng thiết lập lại các kết nối mạng đã bị mất do mất tín hiệu Wi-Fi tạm thời hoặc các lỗi mạng khác. Việc này hiện được thực hiện ở cấp phiên; một phiên có thể chuyển sang trạng thái "bị tạm ngưng" khi mất kết nối và sẽ chuyển về trạng thái "đã kết nối" khi kết nối được khôi phục. Khung này sẽ đảm nhận việc kết nối lại với ứng dụng Trình thu nhận web và kết nối lại mọi kênh Truyền trong quá trình này.
Ngoài ra, CAF cũng thêm tính năng tự động tiếp tục phiên được bật theo mặc định (và có thể huỷ kích hoạt thông qua
CastOptions
.
Nếu ứng dụng của người gửi được gửi ở chế độ nền hoặc bị chấm dứt (bằng cách trượt hoặc do sự cố) khi một phiên Truyền đang diễn ra, thì khung sẽ cố gắng tiếp tục phiên đó khi ứng dụng của người gửi quay lại nền trước hoặc được chạy lại. Thao tác này sẽ được SessionManager
xử lý tự động. Điều này sẽ đưa ra lệnh gọi lại thích hợp trên mọi thực thể SessionManagerListener
đã đăng ký.
Đăng ký kênh tuỳ chỉnh
Trong phiên bản 2, các kênh tuỳ chỉnh (triển khai bằng
Cast.MessageReceivedCallback
)
được đăng ký bằng Cast.CastApi
. Trong CAF, các kênh tuỳ chỉnh sẽ được đăng ký bằng thực thể CastSession
. Bạn có thể đăng ký bằng phương thức gọi lại SessionManagerListener.onSessionStarted
. Đối với các ứng dụng đa phương tiện, bạn không cần phải đăng ký rõ ràng kênh điều khiển nội dung nghe nhìn qua Cast.CastApi.setMessageReceivedCallbacks
; hãy xem phần sau để biết thêm thông tin chi tiết.
Điều khiển phương tiện
Lớp v2 RemoteMediaPlayer
không được dùng nữa và không nên sử dụng. Trong CAF, lớp này được thay thế bằng lớp RemoteMediaClient
mới. Lớp này cung cấp chức năng tương đương trong một API thuận tiện hơn. Bạn không cần phải khởi chạy hoặc đăng ký đối tượng này một cách rõ ràng; khung sẽ tự động tạo thực thể cho đối tượng và đăng ký kênh nội dung nghe nhìn cơ bản tại thời điểm bắt đầu phiên nếu ứng dụng Trình nhận web được kết nối để hỗ trợ không gian tên nội dung đa phương tiện.
Bạn có thể truy cập RemoteMediaClient
dưới dạng phương thức getRemoteMediaClient
của đối tượng CastSession
.
Trong phiên bản 2, tất cả các yêu cầu nội dung nghe nhìn được đưa ra trên RemoteMediaPlayer
sẽ trả về RemoteMediaPlayer.MediaChannelResult
thông qua lệnh gọi lại PendingResult
.
Trong CAF, tất cả yêu cầu nội dung nghe nhìn được đưa ra trên RemoteMediaClient
đều trả về RemoteMediaClient.MediaChannelResult
thông qua lệnh gọi lại PendingResult
. Lệnh này có thể được dùng để theo dõi tiến trình và kết quả cuối cùng của yêu cầu.
RemoteMediaPlayer
v2 sẽ gửi thông báo về các thay đổi đối với trạng thái trình phát nội dung đa phương tiện trên Web receiver qua RemoteMediaPlayer.OnStatusUpdatedListener
.
Trong CAF, RemoteMediaClient
cung cấp các lệnh gọi lại tương đương thông qua giao diện RemoteMediaClient.Listener
. Bạn có thể đăng ký số lượng trình nghe bất kỳ bằng RemoteMediaClient
, cho phép nhiều thành phần người gửi chia sẻ một bản sao của RemoteMediaClient
được liên kết với phiên.
Trong phiên bản 2, ứng dụng gửi phải đảm nhận gánh nặng trong việc đồng bộ hoá giao diện người dùng với trạng thái của trình phát nội dung đa phương tiện trên Web receiver.
Trong CAF, lớp UIMediaController
chịu trách nhiệm hầu hết trách nhiệm này.
Lớp phủ giới thiệu
Phiên bản 2 không cung cấp giao diện người dùng lớp phủ giới thiệu.
CAF cung cấp khung hiển thị tuỳ chỉnh IntroductoryOverlay
để làm nổi bật nút Truyền khi hiện nút này lần đầu cho người dùng.
Tay điều khiển mini
Trong phiên bản 2, bạn cần triển khai một bộ điều khiển mini từ đầu trong ứng dụng dành cho người gửi.
Trong CAF, SDK sẽ cung cấp khung hiển thị tuỳ chỉnh, MiniControllerFragment
. Bạn có thể thêm khung hiển thị này vào tệp bố cục ứng dụng của các hoạt động mà bạn muốn hiện trình điều khiển thu nhỏ.
Thông báo và màn hình khoá
Trong phiên bản 2, SDK không cung cấp bộ điều khiển cho thông báo và màn hình khoá. Đối với SDK đó, bạn cần tích hợp các tính năng này vào ứng dụng của người gửi bằng API khung Android.
Trong CAF, SDK cung cấp một NotificationsOptions.Builder
để giúp bạn tạo các chế độ điều khiển nội dung nghe nhìn cho thông báo và màn hình khoá trong ứng dụng gửi. Bạn có thể bật các chế độ điều khiển thông báo và màn hình khoá bằng CastOptions
khi khởi chạy 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();
}
Đã mở rộng bộ điều khiển
Trong phiên bản 2, bạn cần triển khai từ đầu một bộ điều khiển mở rộng trong ứng dụng gửi.
CAF cung cấp một lớp trợ giúp UIMediaController
giúp bạn dễ dàng tạo bộ điều khiển mở rộng của riêng mình.
CAF sẽ thêm một tiện ích bộ điều khiển mở rộng được tạo sẵn ExpandedControllerActivity
mà bạn chỉ cần thêm vào ứng dụng của mình. Bạn không cần triển khai bộ điều khiển mở rộng tuỳ chỉnh bằng UIMediaController
nữa.
Quyền phát âm thanh
Trong phiên bản 2, bạn cần sử dụng MediaSessionCompat
để quản lý quyền phát âm thanh.
Trong CAF, quyền phát âm thanh sẽ được quản lý tự động.
Ghi nhật ký gỡ lỗi
Trong CAF, không có tuỳ chọn ghi nhật ký.
Ứng dụng mẫu
Chúng tôi có các hướng dẫn của lớp học lập trình và các ứng dụng mẫu sử dụng CAF.