Quy trình sau đây cho phép bạn chuyển đổi ứng dụng gửi trên Android từ Cast SDK phiên bản 2 sang Trình gửi CAF dựa trên CastContext CastContext.
SDK Trình gửi CAF 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 ứng dụng Cast.
Giới thiệu
- Trình gửi CAF vẫn được phân phối dưới dạng 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 Thiết kế Google Cast (
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 về trải nghiệm người dùng Cast; 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 cần sử dụng GoogleApiClient để sử dụng API Cast.
- Tính năng phụ đề chi tiết trong Trình gửi CAF tương tự như phiên bản 2.
Phần phụ thuộc
Phiên bản 2 và CAF có cùng các phần phụ thuộc vào thư viện hỗ trợ và Dịch vụ Google Play services (9.2.0 trở lên) như mô tả trong Hướng dẫn về các tính năng của Thư viện hỗ trợ Guide
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 thực hiện một bước khởi chạy rõ ràng cho khung Cast. Bước này bao gồm việc khởi chạy singleton CastContext, sử dụng OptionsProvider thích hợp để chỉ định mã ứng dụng Web Receiver 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 ứ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 CastContext một cách trì hoãn 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);
}
Bạn không cần thực hiện các bước này trong phiên bản 2.
Khám phá thiết bị
Trong CAF, quy trình khám phá sẽ tự động bắt đầu và dừng bởi khung khi ứng dụng chuyển lên nền trước và chuyển xuống nền sau. Bạn không nên sử dụng MediaRouteSelector và MediaRouter.Callback.
Nút Truyền và hộp thoại Truyền
Giống như trong phiên bản 2, các thành phần này được cung cấp bởi thư viện hỗ trợ MediaRouter .
Nút Truyền vẫn được triển khai bởi MediaRouteButton 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.
<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 mỗi Hoạt động bằng cách sử dụng CastButtonFactory để kết nối MediaRouteButton với khung 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;
}
Khi ai đó nhấn vào nút này, hộp thoại Truyền sẽ tự động xuất hiện.
Điều khiển thiết bị
Trong CAF, việc điều khiển thiết bị chủ yếu do khung xử lý. Ứng dụng gửi không cần xử lý (và không nên cố gắng xử lý) việc kết nối với thiết bị và khởi chạy ứng dụng Web Receiver bằng GoogleApiClient. Tương tác giữa trình gửi và Web Receiver hiện được biểu thị dưới dạng "phiên". Lớp
SessionManager
xử lý vòng đời của phiên và tự động bắt đầu và dừng các phiên
để phản hồi cử chỉ của người dùng: một phiên sẽ bắt đầu khi người dùng chọn một thiết bị Cast
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 kết thúc. Ứ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ý SessionManagerListenervới SessionManager. Các lệnh gọi lại SessionManagerListener xác định các 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 với thiết bị Cast. 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, các
Cast.Listener
lệnh gọi lại 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 thay đổi trạng thái âm lượng/tắt tiếng vẫn được gửi qua các phương thức gọi lại trong Cast.Listener; các trình nghe này được đăng ký bằng
CastSession.
Tất cả các thông báo trạng thái thiết bị còn lại đều được gửi qua
CastStateListener
các lệnh gọi lại; các trình nghe này được đăng ký bằng CastSession. Hãy nhớ huỷ đăng ký trình nghe khi các phân mảnh, hoạt động hoặc ứng dụng được liên kết chuyển xuống nền sau.
Logic kết nối lại
Giống 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 "tạm ngưng" khi kết nối bị mất và sẽ chuyển lại trạng thái "đã kết nối" khi khả năng kết nối được khôi phục. Khung sẽ đảm nhận việc kết nối lại với ứng dụng Web Receiver và kết nối lại mọi kênh Cast 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ể tắt thông qua
CastOptions.
Nếu ứng dụng gửi được gửi xuống nền sau hoặc bị chấm dứt (bằng cách vuốt để đóng hoặc do gặp sự cố) trong khi phiên Cast đang diễn ra, thì khung sẽ cố gắng tiếp tục phiên đó khi ứng dụng gửi quay lại nền trước hoặc được khởi chạy lại; việc này được SessionManager tự động xử lý, sẽ đưa ra các 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 (được triển khai bằng
Cast.MessageReceivedCallback)
được đăng ký bằng Cast.CastApi. Trong CAF, các kênh tuỳ chỉnh được đăng ký bằng thực thể CastSession. Bạn có thể thực hiện việc đăng ký trong 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 thông 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
đã ngừng hoạt động và không nên được sử dụng. Trong CAF, lớp này được thay thế bằng lớp mới
RemoteMediaClient, cung cấp chức năng tương đương trong một API tiện lợi hơn. Bạn không cần khởi chạy hoặc đăng ký rõ ràng đối tượng này; khung sẽ tự động tạo thực thể đối tượng và đăng ký kênh nội dung nghe nhìn cơ bản vào thời điểm bắt đầu phiên nếu ứng dụng Web Receiver đang kết nối hỗ trợ không gian tên nội dung nghe nhìn.
Bạn có thể truy cập vào 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 về nội dung nghe nhìn được gửi trên RemoteMediaPlayer sẽ trả về
RemoteMediaPlayer.MediaChannelResult thông qua lệnh gọi lại PendingResult.
Trong CAF, tất cả các yêu cầu về nội dung nghe nhìn được gửi trên RemoteMediaClient đều trả về
RemoteMediaClient.MediaChannelResult
thông qua lệnh gọi lại
PendingResult
mà bạn có thể dùng để theo dõi tiến trình và kết quả cuối cùng của
yêu cầu.
RemoteMediaPlayer phiên bản 2 sẽ gửi thông báo về các thay đổi trong trạng thái trình phát nội dung nghe nhìn trên Web Receiver thông 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 gửi chia sẻ một thực thể RemoteMediaClient được liên kết với phiên.
Trong phiên bản 2, ứng dụng gửi phải chịu trách nhiệm đồng bộ hoá giao diện người dùng với trạng thái trình phát nội dung nghe nhìn trên Web Receiver.
Trong CAF, lớp UIMediaController đảm nhận 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 chế độ xem tuỳ chỉnh
IntroductoryOverlay
để làm nổi bật nút Truyền khi nút này lần đầu tiên được hiển thị cho người dùng.
Bộ điều khiển thu nhỏ
Trong phiên bản 2, bạn cần triển khai trình điều khiển thu nhỏ từ đầu trong ứng dụng gửi.
Trong CAF, SDK cung cấp chế độ xem tuỳ chỉnh,
MiniControllerFragment,
mà bạn có thể thêm vào tệp bố cục ứng dụng của các hoạt động mà bạn muốn hiển thị 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 trình đ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 gửi bằng API khung Android.
Trong CAF, SDK cung cấp
NotificationsOptions.Builder
để giúp bạn tạo các nút điều khiển nội dung nghe nhìn cho thông báo và màn hình khoá
vào ứng dụng gửi. Bạn có thể bật các nút đ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();
}
Bộ điều khiển mở rộng
Trong phiên bản 2, bạn cần triển khai trình điều khiển mở rộng từ đầu trong ứng dụng gửi.
CAF cung cấp 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 thêm tiện ích trình đ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. Bạn không còn cần
triển khai trình điều khiển mở rộng tuỳ chỉnh bằng UIMediaController.
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 đượ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 lớp học lập trình và ứng dụng mẫu sử dụng CAF.