2014-01-08 4 views
2

В примере на https://developers.google.com/cast/cast_2nd-screen_app_tutorial показан метод onDestroy, который вызывает unregisterMediaRouteProvider. Это вызывает вызов метода MediaRouter.Callback.onRouteUnselected, который, в свою очередь, завершает сеанс. Это приводит к отключению приложения от устройства хромирования, а MediaRouteButton перестает быть синим. Ниже onDestroy метод из примера:Каков правильный способ обработки вращения экрана и кнопки маршрута мультимедиа и существующего сеанса?

@Override 
protected void onDestroy() { 
    MediaRouteHelper.unregisterMediaRouteProvider(mCastContext); 
    mCastContext.dispose(); 
    super.onDestroy(); 
} 

Так что мой вопрос, что такое правильный способ справиться поворот экрана при использовании устройства CHROMECAST из приложения?

ответ

1

Вы можете попробовать использовать метод isFinishing(), чтобы выяснить, вызван ли onDestroy из-за того, что приложение действительно «заканчивается» или вызвано по другим причинам. Другой вариант - отрегулировать изменение ориентации самостоятельно.

0

Вы можете увидеть инструкции по работе установки/разрушения Chromecast (например, когда изменение ориентации происходит) на https://developers.google.com/cast/docs/android_sender

Соответствующие разделы кода являются следующие:

@Override 
protected void onResume() { 
    super.onResume(); 
    mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback, 
    MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY); 
} 

@Override 
protected void onPause() { 
    if (isFinishing()) { 
    mMediaRouter.removeCallback(mMediaRouterCallback); 
    } 
super.onPause(); 
} 

И также следующий код:

@Override 
protected void onStart() { 
    super.onStart(); 
    mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback, 
    MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY); 
} 

@Override 
protected void onStop() { 
    mMediaRouter.removeCallback(mMediaRouterCallback); 
    super.onStop(); 
} 

это также хорошая идея, чтобы иметь логическое значение в вашей программе, например «wasLaunc hed "или" isConnected ", чтобы отслеживать, активно ли соединение с хромотемом. Я использую эту переменную в своем коде, чтобы проверить, могу ли я отправлять сообщения получателю или нет. Затем просто не забудьте сохранить эту переменную и восстановить ее при изменении ориентации на устройстве. Это работает для меня в моем приложении с поддержкой хромирования. Код для сохранения/восстановления моих переменного, поэтому survices изменения ориентации показан ниже:

protected void onSaveInstanceState(Bundle bundle) {  
    if (bundle!=null) 
    { 
     bundle.putBoolean("wasLaunched", wasLaunched); 
    } 
    super.onSaveInstanceState(bundle); 
} 

protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    if (savedInstanceState!=null) 
    { 
     wasLaunched = savedInstanceState.getBoolean("wasLaunched"); 
    } 
    super.onRestoreInstanceState(savedInstanceState); 
}; 

Конечно, вы также можете поместить другие вещи в вашей связке, который должен пережить изменение ориентации. Я не использую onDestroy, чтобы вы описали его, и не упоминается в документации Google, к которой я привязываюсь. Но я использую метод teardown(), описанный в этом документе, для которого я ссылаюсь для очистки, но это происходит только при закрытии соединения, потому что я не хочу закрывать соединение с хромовым при изменении ориентации.

+0

Думаю, я задал этот вопрос до того, как был выпущен официальный SDK, спасибо, что посмотрели на него. – casolorz

+0

Есть ли способ сохранить соединение, когда устройство переходит на блокировку экрана? –

+0

Но я не думаю, что вы потеряете соединение с хромированием при блокировке экрана? (По крайней мере, если вы это сделаете, тогда должно быть возможно сохранить соединение, потому что это именно то, что делает приложение Netflix, потому что оно работает и в блокировке экрана) – zaifrun

 Смежные вопросы

  • Нет связанных вопросов^_^