Quy trình sau đây cho phép bạn chuyển đổi ứng dụng dành cho thiết bị gửi Android từ tính năng Truyền SDK phiên bản 2 đến Trình gửi CAF, dựa trên CastContext singleton.
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 bạn đơn giản hoá việc phát triển ứng dụng Truyền.
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 và 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.*
) - CAF Sender cung cấp các tiện ích tuân thủ các yêu cầu về 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 phải triển khai các thành phần này các tiện ích khác nhau.
- 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à Google Play dịch vụ (9.2.0 trở lên) như được mô tả tại Tính năng của Thư viện hỗ trợ Hướng dẫn
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. Chiến dịch này
bao gồm việc khởi chạy
CastContext
singleton, sử dụng
OptionsProvider
để chỉ định ID ứng dụng Trình nhận web và bất kỳ tùy chọn chung nào 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 "ứng dụng" thẻ của ứng dụng
Tệp AndroidManifest.xml
:
<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 bắt đầu và dừng tự động bằng
khi ứng dụng chạy trên nền trước và chuyển sang chạy ở chế độ nền,
tương ứng. MediaRouteSelector
và MediaRouter.Callback
không được
đã sử dụng.
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 được hỗ trợ MediaRouter cung cấp thư viện.
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 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ười gửi
ứng dụng không cần xử lý (và không nên cố gắng xử lý) 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 người gửi và Web receiver hiện được biểu thị
dưới dạng "phiên". Chiến lược phát hành đĩa đơn
SessionManager
lớp xử lý vòng đời phiên, tự động bắt đầu và dừng 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 Truyền
trong hộp thoại Truyền và được kết thúc khi người dùng nhấn vào "Dừng truyền"
trong hộp thoại Truyền hoặc khi chính ứng dụng của người gửi chấm dứt. Người gửi
ứng dụng 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ý một
SessionManagerListener
bằng SessionManager
. Các lệnh gọi lại SessionManagerListener
xác định
cho tất cả các sự kiện trong vòng đời phiên.
Chiến lược phát hành đĩa đơn
CastSession
lớp 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, được thực hiện trước đây trong phiên bản 2
bằng các phương thức trên Cast.CastApi
.
Trong v2,
Cast.Listener
lệnh gọi lại cung cấp thông báo về những 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ề việc thay đổi trạng thái âm lượng/tắt tiếng vẫn được gửi qua lệnh gọi lại
các phương thức 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
CastStateListener
các lệnh gọi lại; những trình nghe này đã được đăng ký với CastSession
. Đả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
ở 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 đều 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. Lúc này là được thực hiện ở cấp phiên hoạt động; một phiên có thể chuyển sang trạng thái "bị tạm ngưng" cho biết khi mất kết nối và sẽ chuyển về trạng thái "đã kết nối" nêu rõ khi nào kết nối đã được khôi phục. Khung này đảm nhận việc kết nối lại với Web receiver 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 hoạt động, được bật bằng cách
mặc định (và có thể huỷ kích hoạt 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
vuốt ra xa hoặc do gặp sự cố) trong khi phiên Truyền đang diễn ra,
khung này 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; việc này được xử lý tự động bằng
SessionManager
sẽ tạo lệnh gọi lại thích hợp trên bất kỳ lệnh gọi lại nào đã đăng ký
SessionManagerListener
thực thể.
Đăng ký kênh tuỳ chỉnh
Trong phiên bản 2, kênh tuỳ chỉnh (được triển khai bằng
Cast.MessageReceivedCallback
)
đã được đăng ký với Cast.CastApi
. Trong CAF, kênh tuỳ chỉnh được đăng ký bằng
Thực thể CastSession
. Việc đăng ký có thể được thực hiện trong
SessionManagerListener.onSessionStarted
phương thức gọi lại. Đối với các ứng dụng đa phương tiện, bạn không cần phải thể hiện rõ ràng
đăng ký kênh điều khiển nội dung đa phương tiện qua Cast.CastApi.setMessageReceivedCallbacks
;
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 dùng nữa và không nên sử dụng. Trong CAF, nó được thay thế bằng
RemoteMediaClient
, cung cấp chức năng tương đương trong một API thuận tiện hơn. Đó là
không cần thiết để 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ý nội dung nghe nhìn cơ bản
kênh 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 với
hỗ trợ không gian tên đ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 đa phương tiệ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ả yêu cầu đa phương tiện được đưa ra trên RemoteMediaClient
đều trả về một giá trị
RemoteMediaClient.MediaChannelResult
qua
PendingResult
lệnh gọi lại này có thể được dùng để theo dõi tiến trình và kết quả cuối cùng của
của bạn.
RemoteMediaPlayer
v2 sẽ gửi thông báo về những thay đổi trong nội dung nghe nhìn
trạng thái của người chơi 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
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 thực thể duy nhất của RemoteMediaClient
được liên kết với phiên hoạt động đó.
Trong phiên bản 2, ứng dụng của người gửi phải đảm nhận gánh nặng trong việc giữ chân người dùng giao diện đồng bộ hoá với trạng thái trình phát nội dung đa phương tiện trên Web receiver.
Trong CAF, lớp
UIMediaController
đảm nhận phần lớn 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
để đánh dấu nút Truyền khi nút này hiển thị lần đầu với 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 cung cấp một khung 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
bạn muốn hiện tay đ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 cách sử dụ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 của người 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á
với
CastOptions
khi khởi tạo 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 một bộ điều khiển mở rộng từ đầu trong ứng dụng của người gửi.
CAF cung cấp
UIMediaController
lớp trợ giúp giúp bạn dễ dàng xây dựng
thiết bị điều khiển.
CAF 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 phải
triển khai bộ điều khiển mở rộng tuỳ chỉnh bằng UIMediaController
.
Tập trung â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 ta có hướng dẫn của lớp học lập trình và ứng dụng mẫu sử dụng CAF.