Quy trình sau đây cho phép bạn chuyển đổi ứng dụng trình phát Android từ Cast SDK v2 sang Trình phát CAF, dựa trên singleton CastContext.
SDK Trình gửi Cast CAF sử dụng CastContext để thay mặt bạn quản lý GoogleAPIClient. 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 trong Dịch vụ Google Play bằng cách sử dụng trình quản lý SDK Android
- Thêm các gói mới 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 của Cast; phiên bản 2 không cung cấp 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 Trình gửi CAF tương tự như v2.
Phần phụ thuộc
V2 và CAF có các phần phụ thuộc giống nhau trên thư viện hỗ trợ và dịch vụ Google Play (9.2.0 trở lên) như mô tả trong 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 phải thực hiện một bước khởi chạy rõ ràng cho khung Cast. Việc này liên quan đến việc khởi chạy singleton CastContext
, sử dụng một OptionsProvider
thích hợp để chỉ định mã nhận dạng ứng dụng Web Receiver và mọi tuỳ chọn toàn cục 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" (ứng dụng) của tệp AndroidManifest.xml
của ứ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 tạo CastContext
theo cách lười biếng 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, khung sẽ tự động bắt đầu và dừng quá trình khám phá khi ứng dụng chuyển sang nền trước và nền sau tương ứng. 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 triển khai bằng 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 người dùng 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, khung này chủ yếu xử lý việc kiểm soát thiết bị. Ứ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 Trình thu web bằng GoogleApiClient
. Hoạt động tương tác giữa trình gửi và Trình nhận web 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 được bắt đầu khi người dùng chọn một 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 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ý SessionManagerListener
với SessionManager
. Lệnh gọi lại SessionManagerListener
xác định các phương thức gọi lại cho tất cả sự kiện trong vòng đời của phiên.
Lớp CastSession
đại diện cho một phiên với thiết bị Truyền. Lớp này có các phương thức để kiểm soát âm lượng và trạng thái tắt tiếng của thiết bị. Trước đây, bạn đã thực hiện việc này trong phiên bản 2 bằng cách sử dụng các phương thức trên Cast.CastApi
.
Trong phiên bản 2, các 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 thay đổi trạng thái âm lượng/tắt tiếng vẫn được phân phối thông 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ả thông báo trạng thái thiết bị còn lại đều được phân phối thông qua lệnh gọi lại CastStateListener
; các trình nghe này được đăng ký bằng CastSession
. Hãy nhớ bạn vẫn phải huỷ đăng ký trình nghe khi các mảnh, hoạt động hoặc ứng dụng được liên kết chuyển sang chế độ nền.
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 tín hiệu Wi-Fi tạm thời bị mất 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ẽ 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ể được vô hiệu hoá thông qua CastOptions
.
Nếu ứng dụng gửi được gửi vào chế độ nền hoặc bị chấm dứt (bằng cách vuốt đi hoặc do sự cố) trong khi phiên Truyền đang diễn ra, thì khung sẽ cố gắng tiếp tục phiên đó khi ứng dụng gửi trở lại nền trước hoặc được chạy lại; việc này được SessionManager
tự động xử lý, thao tác 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 (đượ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ể đă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 đa phương tiện thông qua Cast.CastApi.setMessageReceivedCallbacks
nữa; hãy xem phần sau để biết thêm chi tiết.
Điều khiển phương tiện
Lớp v2 RemoteMediaPlayer
không còn được dùng nữa và bạn không nên sử dụng. Trong CAF, lớp này được thay thế bằng lớp RemoteMediaClient
mới, 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ý rõ ràng đối tượng này; khung sẽ tự động tạo bản sao đối tượng và đăng ký kênh nội dung đa phương tiện cơ bản tại 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 đ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ề một RemoteMediaPlayer.MediaChannelResult
thông qua lệnh gọi lại PendingResult
.
Trong CAF, tất cả các yêu cầu nội dung nghe nhìn được đưa ra trên RemoteMediaClient
đều trả về một RemoteMediaClient.MediaChannelResult
thông qua lệnh gọi lại PendingResult
. Lệnh gọi lại này 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 đa phương tiệ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
. Điều này cho phép nhiều thành phần trình 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 gánh vác 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 đa phương tiện trên Trình thu web.
Trong CAF, lớp UIMediaController
sẽ đả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 một thành phần hiển thị tuỳ chỉnh IntroductoryOverlay
để làm nổi bật nút Truyền khi nút này xuất hiện 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 trình điều khiển mini từ đầu trong ứng dụng gửi.
Trong CAF, SDK cung cấp một thành phần hiển thị 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ị tay điều khiển mini.
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 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á vào ứ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();
}
Bộ điều khiển mở rộng
Trong phiên bản 2, bạn cần triển khai một bộ điều khiển mở rộng từ đầu trong ứng dụng gửi.
CAF cung cấp một lớp trình trợ giúp UIMediaController
giúp bạn dễ dàng tạo trình điều khiển mở rộng của riêng mình.
CAF thêm một tiện ích tay điều khiển mở rộng tạo sẵn ExpandedControllerActivity
mà bạn chỉ cần thêm vào ứng dụng. Bạn không cần triển khai tay điều khiển mở rộng tuỳ chỉnh bằng UIMediaController
nữa.
Tập trung âm thanh
Trong phiên bản 2, bạn cần sử dụng MediaSessionCompat
để quản lý tiêu điểm â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ý nào.
Ứng dụng mẫu
Chúng tôi có hướng dẫn về lớp học lập trình và ứng dụng mẫu sử dụng CAF.