Chromecast와 ActionbarSherlock을 모두 지원하는 애플리케이션을 개발 중입니다.
모든 활동에서 ActionBar에 MediaRouteButton을 만듭니다.여러 활동이있는 Chromecast
제 문제는 첫 번째 활동에서 Chromecast 기기에 연결하지 않고 두 번째 활동으로 이동한다는 것입니다. 두 번째로는 Chromecast 기기에 연결합니다. 그것은 두 번째 활동의 onRouteSelected()
에 들어갔다가 첫 번째 활동의 onDeviceAvailable()
->openSession()
으로 뛰었다.
왜 두 번째 활동에서 onDeviceAvailable()
이 실행되지 않았는지 알 수 없습니다.
아무도 도와 줄 수 있습니까?
MediaRouteHelper.registerMinimalMediaRouteProvider(mCastContext, this);
두 번째 활동에서 false를 반환합니다 :
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cast_sample);
mMetaData = new ContentMetadata();
mMediaSelectionDialog = new MediaSelectionDialog(this);
mCastContext = new CastContext(getApplicationContext());
MediaRouteHelper.registerMinimalMediaRouteProvider(mCastContext, this);
mMediaRouter = MediaRouter.getInstance(getApplicationContext());
mMediaRouteSelector = MediaRouteHelper.buildMediaRouteSelector(MediaRouteHelper.CATEGORY_CAST);
mMediaRouterCallback = new MyMediaRouterCallback();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
getSupportMenuInflater().inflate(R.menu.cast_sample, menu);
com.actionbarsherlock.view.MenuItem mediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item);
mMediaRouteButton = (MediaRouteButton) mediaRouteMenuItem.getActionView();
mMediaRouteButton.setRouteSelector(mMediaRouteSelector);
return true;
}
@Override
protected void onStart() {
super.onStart();
mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback,
MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY);
}
@Override
protected void onStop() {
mMediaRouter.removeCallback(mMediaRouterCallback);
super.onStop();
}
private class MyMediaRouterCallback extends MediaRouter.Callback {
@Override
public void onRouteSelected(MediaRouter router, RouteInfo route) {
MediaRouteHelper.requestCastDeviceForRoute(route);
}
@Override
public void onRouteUnselected(MediaRouter router, RouteInfo route) {
try {
if (mSession != null) {
logVIfEnabled(TAG, "Ending session and stopping application");
mSession.setStopApplicationWhenEnding(true);
mSession.endSession();
} else {
Log.e(TAG, "onRouteUnselected: mSession is null");
}
} catch (IllegalStateException e) {
Log.e(TAG, "onRouteUnselected:");
e.printStackTrace();
} catch (IOException e) {
Log.e(TAG, "onRouteUnselected:");
e.printStackTrace();
}
mMessageStream = null;
mSelectedDevice = null;
}
}
@Override
public void onDeviceAvailable(CastDevice device, String myString,
MediaRouteStateChangeListener listener) {
mSelectedDevice = device;
logVIfEnabled(TAG, "Available device found: " + myString);
openSession();
}
private void openSession() {
mSession = new ApplicationSession(mCastContext, mSelectedDevice);
.....
}
감사합니다 –
이 여전히 유효합니까? 지금까지 찾은이 주제에 관한 유망한 자료와 유일한 자료입니다. – sschrass
당시 개인 SDK로 작업하고있었습니다. 2014 년 2 월에 출시 된 공개 SDK는 평가하지 않았지만 Google이이를 쉽게 만든다면 놀라지 않을 것입니다. – ActiveApathy