Хобрук: Ваш путь к мастерству в программировании

Почему Nexus 7 2012 Android 4.2.2 (только WIFI) не находит кнопку Media Route по идентификатору?

Приложение 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.


  • Опубликуйте xml или программное создание кнопки, которая не найдена. Если это пользовательский класс, опубликуйте его код. Опубликуйте нефильтрованный logcat попытки запуска. 02.05.2014
  • Итак, вы говорите, что у вас есть макет xml, в котором есть кнопка, но findViewById() не находит ее? Может ли быть так, что у вас есть XML-файл с похожим именем, скажем, layout-large-hdpi (или что-то еще, что подхватывается N7), в котором нет MediaRouteButton? 03.05.2014
  • @AliNaddaf Кристофер обновил второй абзац, указав структуру папок. Есть только одна папка макета. 03.05.2014
  • Если вы получаете нулевое значение для findViewById(), то это действительно вопрос Android, не связанный с Chromecast. Чтобы увидеть, действительно ли ваша активность получает ожидаемый макет XML, просто внесите небольшое изменение в макет и посмотрите, увидит ли ваш N7 это изменение. Если это не поможет, вам нужно создать тестовый проект с минимальным набором файлов (удаление всех материалов игрока, материалов актеров и т. д.), демонстрирующих вашу проблему, и поместить его куда-нибудь, чтобы мы могли получить к нему доступ, чтобы увидеть, что происходит. 03.05.2014
  • Спасибо @AliNaddaf, мы наконец-то разобрались! 21.05.2014

Новые материалы

Как симулировать серию пенальти на Python с помощью симуляции Монте-Карло, часть 1: генерация функций
Серия пенальти была огромным испытанием во время чемпионата мира по футболу. Они вызвали много споров в социальных сетях и новостных агентствах. Даже финальный матч турнира решался по..

AST для разработчиков JavaScript
TL; DR Эта статья - мое выступление на недавно состоявшейся конференции Stockholm ReactJS Meetup. Вы можете посмотреть слайды здесь..

5 проектов на Python, которые нужно создать прямо сейчас!
Добро пожаловать! Python — один из моих любимых языков программирования. Если вы новичок в этом языке, перейдите по ссылке ниже, чтобы узнать о нем больше:

Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

«Очень простой» эволюционный подход к обучению с подкреплением
В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

Фишинг — Упаковано и зашифровано
Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..