1
A
回答
0
如果你正在寻找代码示例,您可以检查googlecast/CastVideos-android作为参考。
另外如何使用SessionManager在How session management works
的角色框架提到引入了一个会话,其包括 连接到设备,发射(或连接)的接收器的应用程序, 连接到的概念应用程序,并初始化媒体控制通道,如果 合适。从用户的角度来看,当 用户从演员对话框选择一个接收器和停止时,无论是 用户在会话开始选择停止投放,或者直到另一个发件人蒙上东西 相同的设备。
会话由SessionManager类管理,您的应用可以通过CastContext.getSessionManager()访问 。单独的会话是由类Session的子类表示的 。例如, CastSession用Cast设备表示会话。您的应用可以访问 当前处于活动状态的Cast会话 SessionManager.getCurrentCastSession()。
您的应用可以使用SessionManagerListener类监视会话 事件,如创建,暂停,恢复和终止。当会话处于活动状态时, 框架会自动尝试从非正常/突然 终止中恢复。
会话被创建,并且响应于用户从对话框MediaRouter手势 自动拆除。
如果你需要知道的会话的状态变化,可以 实现SessionManagerListener。本示例监听活动中CastSession的可用性 。
public class MyActivity extends Activity {
private CastSession mCastSession;
private SessionManager mSessionManager;
private final SessionManagerListener mSessionManagerListener =
new SessionManagerListenerImpl();
private class SessionManagerListenerImpl implements SessionManagerListener {
@Override
public void onSessionStarted(Session session, String sessionId) {
invalidateOptionsMenu();
}
@Override
public void onSessionResumed(Session session, boolean wasSuspended) {
invalidateOptionsMenu();
}
@Override
public void onSessionEnded(Session session, int error) {
finish();
}
}
@Override
protected void onCreate() {
mSessionManager = CastContext.getSharedInstance(this).getSessionManager();
super.onCreate();
}
@Override
protected void onResume() {
mCastSession = mSessionManager.getCurrentCastSession();
mSessionManager.addSessionManagerListener(mSessionManagerListener);
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
mSessionManager.removeSessionManagerListener(mSessionManagerListener);
mCastSession = null;
}
}
0
最近我有同样的要求。
可以使用MediaRouter检测投射设备。
MediaRouter mMediaRouter = MediaRouter.getInstance(this);
MediaRouteSelector mMediaRouteSelector = new MediaRouteSelector.Builder()
.addControlCategory(CastMediaControlIntent.categoryForCast(getString(R.string.cast_app_id)))
.build();
mMediaRouter.addCallback(mMediaRouterCallback, mMediaRouterCallback, MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY);
// Then get your media routes using
List<RouteInfo> routes = mMediaRouter.getRoutes()
// Get cast devices for your media routes.
// Save these for future use as per your use case
List<CastDevice> castDevices = routes.stream()
.map(route -> CastDevice.getFromBundle(route.getExtras()))
.collect(Collectors.toCollection())
要自动连接到投射设备并传输一些内容,请使用此代码段。请注意,您可能无法使用RemoteMediaPlayer,具体取决于您的接收器应用程序。这段代码工作对我来说,因为我的接收器应用程序使用MediaManager
// Connect to the cast device you want to stream the content to
private void connectToCastDevice(CastDevice castDevice) {
Cast.CastOptions apiOptions = Cast.CastOptions.builder(castDevice, mCastListener).build();
mApiClient = new GoogleApiClient.Builder(this)
.addApi(Cast.API, apiOptions)
.addConnectionCallbacks(mConnectionCallback)
.addOnConnectionFailedListener(mConnectionFailedListener)
.build();
mApiClient.connect();
}
// After you are connected to the cast device. Load your media to it
// In my case using RemoteMediaPlayer
private void loadMediaItem(final MediaInfo mediaInfo) {
LaunchOptions launchOptions = new LaunchOptions();
launchOptions.setRelaunchIfRunning(false);
PendingResult<Cast.ApplicationConnectionResult> result = Cast.CastApi.launchApplication(mApiClient, getString(R.string.cast_app_id), launchOptions);
result.then(new ResultTransform<Cast.ApplicationConnectionResult, RemoteMediaPlayer.MediaChannelResult>() {
@Nullable @Override
public PendingResult<RemoteMediaPlayer.MediaChannelResult> onSuccess(@NonNull Cast.ApplicationConnectionResult applicationConnectionResult) {
Log.d(TAG, "Application launch result: " + applicationConnectionResult);
return mRemoteMediaPlayer.load(mApiClient, mediaInfo);
}
}).andFinally(new ResultCallbacks<RemoteMediaPlayer.MediaChannelResult>() {
@Override
public void onSuccess(@NonNull RemoteMediaPlayer.MediaChannelResult mediaChannelResult) {
Log.d(TAG, "Media channel result: " + mediaChannelResult);
}
@Override
public void onFailure(@NonNull Status status) {
Log.d(TAG, "Media channel status: " + status);
}
});
}
相关问题
- 1. 会话开始不“开始”
- 2. 铸造原始INT到数
- 3. XMLHttpRequest延迟开始会话
- 4. selenium:未开始新会话
- 5. 如何开始会话?
- 6. 帮助PHP会话开始
- 7. PHP没有开始会话?
- 8. PHP cookie将不会设置,除非我开始会话
- 9. IE不会从iframe开始会话?
- 10. 铸造
- 11. 广东话静态铸造类整数
- 12. 铸造原始的自定义类
- 13. 初始化使整数没有铸造
- 14. 铸造初始化器到指针
- 15. C结构数组初始化铸造
- 16. 铸造非原始的双从JSONObject的
- 17. 铸造问题(或者不是铸造)
- 18. 在Java中的类型铸造/铸造
- 19. 铸造异常时铸造双
- 20. 铸造类和设置共同的社会价值观
- 21. 延迟加载协会和铸造
- 22. Symfony2:新会话()给出错误“一个会话已经开始......”
- 23. 如果会话已存在,告诉PHP不要开始会话
- 24. Android设备可以开始为设备ID提供空值吗?
- 25. 在vb.net的page_load开始会话
- 26. 莲花笔记开始会话
- 27. 保持Hibernate会话始终打开
- 28. 测试会话是否开始
- 29. 第二次开始会话还是?
- 30. 会话开始没有被重置
您正在使用过时的代码,v2是没有更多的支持,这个答案没有回答我的问题。 – greywolf82
您可以使用它来[启动会话](https://developer.android.com/reference/android/support/v7/media/MediaControlIntent.html#ACTION_START_SESSION)。 [示例代码](https://github.com/KevinDyer/Chromecast-PlaySpace/blob/master/DemoCastPlayer/src/com/google/android/gms/cast/samples/democastplayer/MrpCastPlayerActivity.java#L274)。请注意,如果在播放媒体时未指定会话ID,[播放媒体](https://developer.android.com/reference/android/support/v7/media/MediaControlIntent.html#ACTION_PLAY)会创建一个新会话。 – Rishabh
您可以选择答案中提到的媒体路由,然后使用[RemotePlayBack](https://developer.android.com/guide/topics/media/mediarouter.html)客户端为您管理会话。 – Rishabh