Chromecast:如何 select 没有 CastButton 的 CastDevice
Chromecast: how to select a CastDevice without a CastButton
我正在开发一个应用程序,我想在其中流式传输位于我的移动设备上的特定视频。我想借助 ChromeCast 将此视频流式传输到投影仪。我已经完成 Google Chromecast 教程(例如 https://codelabs.developers.google.com/codelabs/cast-videos-android/#0)并且已经在寻找我的问题的答案,但我认为没有完美的答案来解决我的问题。
其他编码语言中有一些解决方案,但不是特别适用于 java。
我的 Google 投射 API 的问题是:我想 select 我的 ChromeCast 而不是按选项菜单中的投射按钮 ,似乎 select 网络中的 ChromeCasts 之一。
我刚刚发现,class CastButtonFactory 中的 setRouteSelector-Methode 是 select 设备的一部分。但我找不到如何自动 select 设备。
这是我的代码,其中出现了 CastButton(在 OnCreateOptionsMenu-Method 中创建)(它只是连接到 ChromeCast 的代码。我没有实现 select 播放和流式传输视频的代码还):
谁能帮帮我?
代码:
public class MainActivity extends AppCompatActivity {
private CastSession mCastSession;
private CastContext mCastContext;
private SessionManager mSessionManager;
private final SessionManagerListener mSessionManagerListener = new SessionManagerListenerImpl();
private class SessionManagerListenerImpl implements SessionManagerListener{
@Override
public void onSessionStarting(Session session) {}
@Override
public void onSessionStarted(Session session, String sessionId) {
invalidateOptionsMenu();
}
@Override
public void onSessionStartFailed(Session session, int i) {}
@Override
public void onSessionEnding(Session session) {}
@Override
public void onSessionEnded(Session session, int error) {
finish();
}
@Override
public void onSessionResuming(Session session, String s) {}
@Override
public void onSessionResumed(Session session, boolean wasSuspended) {
invalidateOptionsMenu();
}
@Override
public void onSessionResumeFailed(Session session, int i) {}
@Override
public void onSessionSuspended(Session session, int i) {}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCastContext = CastContext.getSharedInstance(this);
mCastContext.registerLifecycleCallbacksBeforeIceCreamSandwich(this, savedInstanceState);
mSessionManager = CastContext.getSharedInstance(this).getSessionManager();
}
@Override
public void onResume(){
mCastSession = mCastContext.getSessionManager().getCurrentCastSession();
mSessionManager.addSessionManagerListener(mSessionManagerListener);
super.onResume();
}
@Override
public void onPause(){
super.onPause();
mSessionManager.removeSessionManagerListener(mSessionManagerListener);
mCastSession = null;
}
@Override
public void onStart(){
super.onStart();
}
@Override public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.menu, menu);
CastButtonFactory.setUpMediaRouteButton(getApplicationContext(),
menu,
R.id.media_route_menu_item);
return true;
}}
这可以通过 SDK v2. Check out the source code for MediaRouteChooserDialogFragment 实现,UI 元素允许用户 select 投射设备。您需要创建一个 MediaRouter.Callback
,并覆盖 onRouteAdded(MediaRouter router, MediaRouter.RouteInfo newRoute)
。如果新路由不是默认路由,select 它与 mMediaRouter.selectRoute(newRoute)
。这将在没有任何用户交互的情况下将您连接到接收器设备。
这应该适用于测试,但请不要在生产应用中这样做。 @AliNaddaf 正确地指出这违反了 UX 指南和 GoogleCast 服务条款(如果允许应用程序在未经用户同意的情况下开始投射,您可以想象滥用的可能性)。
我正在开发一个应用程序,我想在其中流式传输位于我的移动设备上的特定视频。我想借助 ChromeCast 将此视频流式传输到投影仪。我已经完成 Google Chromecast 教程(例如 https://codelabs.developers.google.com/codelabs/cast-videos-android/#0)并且已经在寻找我的问题的答案,但我认为没有完美的答案来解决我的问题。
其他编码语言中有一些解决方案,但不是特别适用于 java。
我的 Google 投射 API 的问题是:我想 select 我的 ChromeCast 而不是按选项菜单中的投射按钮 ,似乎 select 网络中的 ChromeCasts 之一。
我刚刚发现,class CastButtonFactory 中的 setRouteSelector-Methode 是 select 设备的一部分。但我找不到如何自动 select 设备。
这是我的代码,其中出现了 CastButton(在 OnCreateOptionsMenu-Method 中创建)(它只是连接到 ChromeCast 的代码。我没有实现 select 播放和流式传输视频的代码还):
谁能帮帮我?
代码:
public class MainActivity extends AppCompatActivity {
private CastSession mCastSession;
private CastContext mCastContext;
private SessionManager mSessionManager;
private final SessionManagerListener mSessionManagerListener = new SessionManagerListenerImpl();
private class SessionManagerListenerImpl implements SessionManagerListener{
@Override
public void onSessionStarting(Session session) {}
@Override
public void onSessionStarted(Session session, String sessionId) {
invalidateOptionsMenu();
}
@Override
public void onSessionStartFailed(Session session, int i) {}
@Override
public void onSessionEnding(Session session) {}
@Override
public void onSessionEnded(Session session, int error) {
finish();
}
@Override
public void onSessionResuming(Session session, String s) {}
@Override
public void onSessionResumed(Session session, boolean wasSuspended) {
invalidateOptionsMenu();
}
@Override
public void onSessionResumeFailed(Session session, int i) {}
@Override
public void onSessionSuspended(Session session, int i) {}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCastContext = CastContext.getSharedInstance(this);
mCastContext.registerLifecycleCallbacksBeforeIceCreamSandwich(this, savedInstanceState);
mSessionManager = CastContext.getSharedInstance(this).getSessionManager();
}
@Override
public void onResume(){
mCastSession = mCastContext.getSessionManager().getCurrentCastSession();
mSessionManager.addSessionManagerListener(mSessionManagerListener);
super.onResume();
}
@Override
public void onPause(){
super.onPause();
mSessionManager.removeSessionManagerListener(mSessionManagerListener);
mCastSession = null;
}
@Override
public void onStart(){
super.onStart();
}
@Override public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.menu, menu);
CastButtonFactory.setUpMediaRouteButton(getApplicationContext(),
menu,
R.id.media_route_menu_item);
return true;
}}
这可以通过 SDK v2. Check out the source code for MediaRouteChooserDialogFragment 实现,UI 元素允许用户 select 投射设备。您需要创建一个 MediaRouter.Callback
,并覆盖 onRouteAdded(MediaRouter router, MediaRouter.RouteInfo newRoute)
。如果新路由不是默认路由,select 它与 mMediaRouter.selectRoute(newRoute)
。这将在没有任何用户交互的情况下将您连接到接收器设备。
这应该适用于测试,但请不要在生产应用中这样做。 @AliNaddaf 正确地指出这违反了 UX 指南和 GoogleCast 服务条款(如果允许应用程序在未经用户同意的情况下开始投射,您可以想象滥用的可能性)。