Приложение FIT Radio использует MediaRoute.Callback, инициализированный в моем классе CommandInterface, который управляет воспроизведением обычного звука, а также звука Chromecast. NowPlayingActivity изначально устанавливается как mMediaRouteButtonHandler внутри MediaRoute.Callback, только если MediaRouteButton существует.
Теперь файл now_playing.xml находится в макете по умолчанию с защитными мерами в исходном коде Java. Нашей первой мерой защиты от исключений нулевого указателя (с G2) было удаление кнопки MediaRouteButton из макета по умолчанию. Вторая мера, которая была предпринята, чтобы остановить исключения нулевого указателя, заключалась в добавлении проверки нуля в пример кода NowPlayingActivity.setVisibility(int видимости) ниже для любой другой версии, которая может не предоставлять кнопку (N7 и т. д.).
Обратный вызов MediaRouter добавляется в NowPlayingActivity.onResume() и удаляется в NowPlayingActivity.onPause(). В следующем примере показана обработка видимости в MediaRoute.Callback.onRouteAdded:
public void onRouteAdded(MediaRouter router, RouteInfo route) {
if(hasMediaRouteButtonHandler()) mMediaRouteButtonHandler.setVisibility(View.VISIBLE);
++mRouteCount;
}
У меня есть доступ к Google G2, Note 3, Samsung S III, HTC One M7 и Nexus 7. После запуска MediaRoute.Callback кнопка MediaRoute отображается на всех устройствах [используя NowPlayingActivity.setVisibility(int visibility)] , за исключением Nexus 7 и Google G2.
public void setVisibility(int visibility) {
if(getMediaRouteButton() != null) getMediaRouteButton().setVisibility(visibility);
}
Я использую метод findViewById(int) в NowPlayingActivity, и он возвращает null в последних случаях (Nexus 7 и G2), но работает на S III, HTC One и Note 3.
public MediaRouteButton getMediaRouteButton() {
return (MediaRouteButton) findViewById(R.id.media_route_button);
}
Я искал похожие вопросы на StackOverflow, и реальных ответов на эту проблему не было:
С первым вопросом, который я нашел, пользователь в конце концов разобрался и сообщил, что у него нет четкого решения.
android.support.v7.app.MediaRouteButton не отображается
На другой вопрос ответил постер, и решение пришло с использованием реального устройства вместо эмулятора:
Почему мой MediaRouteButton недоступен для поиска каких-либо устройств трансляции?< /а>
Я отладил это со всеми вышеперечисленными устройствами, с Дирком (Мой контрактник) через плечо! Итак, это критическая проблема, ребята, и нам очень нужна ваша помощь!
Заранее спасибо,
Кристофер Миллер от имени Dirk @ Fit Radio.