MediaRouter: обнаружение устройства Chromecast при использовании ActionBarSherlock?

Поэтому я изменил исходный код Mediarouter так, чтобы он зависел от ActionBarSherlock, а не от AppCompat. Однако теперь обратный вызов от MediaRouteAdapter onDeviceAvailable(...) не вызывается.

Любые идеи о том, как заставить это работать?

Я не хочу оставлять кнопку трансляции всегда видимой. Скорее, я хочу использовать onDeviceAvailable(..), чтобы сделать его видимым только тогда, когда устройство доступно.


person Prem    schedule 22.10.2013    source источник
comment
Откуда вы взяли исходники для Mediarouter?   -  person Steve    schedule 24.10.2013
comment
android.googlesource.com   -  person Prem    schedule 24.10.2013
comment
Спасибо. Не могли бы вы поделиться шагами, которые вы предприняли, чтобы добраться до того места, где вы находитесь сейчас? Я немного запутался, с чего начать, и ты, кажется, единственный, кому повезло заставить этих двоих играть хорошо.   -  person Steve    schedule 24.10.2013
comment
Я сохранил папку mediaRouter и добавил ее как подмодуль в свой проект. Я добавил ActionBarSherlock в качестве зависимости от mediaRouter и последнюю версию библиотеки поддержки Android v4. Теперь, когда вы пытаетесь скомпилировать, вы можете найти несколько (3-5) ошибок из-за ссылок на ресурсы AppCompat. В основном переименуйте эти ресурсы в ресурсы ABS. Для большинства из них работает простая замена части имени, которая говорит «AppCompat» на «Sherlock».   -  person Prem    schedule 25.10.2013
comment
Спасибо. Какая папка mediaRouter? Я не вижу никакого кода в frameworks/support/v7/mediarouter.   -  person Steve    schedule 25.10.2013
comment
Плохо, вот где библиотеки поддержки: github.com/android/platform_frameworks_support   -  person Prem    schedule 26.10.2013
comment
Привет, Прем, я попытался выполнить следующие шаги, но подмодуль mediarouter не скомпилируется. Кажется, что ошибок больше, чем просто ссылок на AppCompat. Когда вы говорите субмодуль, что именно вы имеете в виду? Я просто добавил папку mediarouter в качестве существующего проекта Android в свое рабочее пространство Eclipse. Это то, что ты имеешь в виду?   -  person LyteSpeed    schedule 29.10.2013
comment
Привет @clu, инструкции, которые я предоставил, относятся к модулям в IntelliJ IDEA. Под подмодулем я подразумеваю зависимость модуля. Я не использую Eclipse много, но я думаю, что это означает добавление модуля в качестве библиотеки, от которой зависит ваше приложение.   -  person Prem    schedule 29.10.2013


Ответы (1)


Я нашел хак, как это исправить.

Если вы используете appcompat, значок приведения будет виден только тогда, когда в вашей сети есть устройство Chromecast, в зависимости от вашей реализации onDeviceAvailable(...).

Однако если вы используете ABS, метод onDeviceAvailable(...) не вызывается, когда устройство Chromecast доступно в сети. Итак, чтобы увидеть значок приведения, мы должны сделать его видимым всегда.

Таким образом, проблема в том, что значок приведения всегда виден (когда вы устанавливаете видимость для видимости или когда вы добавляете его на панель действий).

ОДНАКО: MediaRouter имеет разные состояния просмотра. Один, когда доступно устройство трансляции, и один, когда его нет.

Библиотека Mediarouter состоит из рисунков png, которые являются значками, когда устройство доступно или нет.

Просто замените тот, для которого «маршрут недоступен», пустым ресурсом или любым другим, подходящим для приложения.

Когда устройство доступно, отображается правильный значок приведения, а когда он недоступен, отображается ваш пользовательский ресурс (пустой, если ресурс является пустым представлением).

Вот подробная информация о том, как получить исходный код mediarouter и как это исправить: http://www.droidorbit.com/2013/10/mediarouter-and-actionbarsherlock.html

person Prem    schedule 22.10.2013
comment
Я прошел по ссылке, которую вы предложили выше. Но я получил ошибку: MediaRouterJellybean, MediaRouterJellybeanMr1 не может быть преобразован в тип в файле SystemMediaRouteProvider.java. И R.attr.isLightTheme не может быть разрешен или не является полем в файле MediaRouterThemeHelper.java. В настоящее время я прокомментировал этот код для устранения ошибок, затем интегрировал образец Cast с ABS и отобразил значок Cast в ActionBar. Но я получил ошибку: java.lang.ClassCastException: android.support.v7.app.MediaRouteActionProvider не может быть приведен к com.actionbarsherlock.view.ActionProvider. Пожалуйста, помогите мне решить эту проблему. Спасибо - person Huy Duong Tu; 30.10.2013
comment
Не могли бы вы предоставить модифицированный исходный код MediaRouter? Моя электронная почта [email protected]. заранее спасибо - person Huy Duong Tu; 30.10.2013
comment
электронное письмо отправлено вам Huy Dong Tu - person Prem; 30.10.2013
comment
@Prem Благодаря вашему блогу мне удалось успешно реализовать MediaRouter! Спасибо! Единственное, у меня он работает нормально без каких-либо взломов, значок ChromeCast появляется/исчезает автоматически в зависимости от того, включен ли ChromeCast или нет. Я использовал ответ на этот вопрос stackoverflow.com/a/17842846/1433482, и теперь мой onDeviceAvailable также вызывается. Подумал, что это может вас заинтересовать... Кроме того, моя иконка является пунктом меню, как описано здесь androiddev.orkitra.com/?p=70675 - person roarster; 27.12.2013
comment
Это решение больше не работает, MediaRouteAdapter удалено из API. У меня такая же проблема, я хочу скрыть значок, если в сети нет устройства для трансляции. Любые идеи, как это сделать? - person Nimrod Dayan; 27.04.2015