Можно ли использовать MediaRouteButton в действии, отличном от FragmentActivity?

У меня есть приложение для Android, и я пытаюсь интегрировать в него Google Cast, чтобы попробовать его, следуя инструкциям на странице https://developers.google.com/cast/cast_2nd-screen_app_tutorial . Приложение создано с учетом Android API 16. Из-за этого мое приложение не было построено с библиотеками поддержки. Однако условием использования MediaRouteButton является расширение от FragmentActivity.

Преобразование кода для использования вспомогательных библиотек вместо неподдерживаемых эквивалентов превращается в большую проблему. Есть ли альтернативный компонент для приложений, поддерживающих только API 11 и выше? Или я просто отказываюсь от использования MediaRouteButton?

(Я вижу, что могу написать свою собственную кнопку для выбора устройства, но я бы не стал добавлять к ней никаких новых функций, кроме совместимости с моей не-FragmentActivity.)

Я надеюсь, что действие, являющееся FragmentActivity, является требованием только для использования кнопки, а не для других API-интерфейсов MediaRouter.

EDIT: Вот выбрасываемое исключение.

10-24 17:25:02.568: E/AndroidRuntime(25502): FATAL EXCEPTION: main
10-24 17:25:02.568: E/AndroidRuntime(25502): java.lang.IllegalStateException: The activity must be a subclass of FragmentActivity
10-24 17:25:02.568: E/AndroidRuntime(25502):    at android.support.v7.app.MediaRouteButton.showDialog(MediaRouteButton.java:225)
10-24 17:25:02.568: E/AndroidRuntime(25502):    at android.support.v7.app.MediaRouteButton.performClick(MediaRouteButton.java:285)
10-24 17:25:02.568: E/AndroidRuntime(25502):    at android.view.View$PerformClick.run(View.java:18350)
10-24 17:25:02.568: E/AndroidRuntime(25502):    at android.os.Handler.handleCallback(Handler.java:730)
10-24 17:25:02.568: E/AndroidRuntime(25502):    at android.os.Handler.dispatchMessage(Handler.java:92)
10-24 17:25:02.568: E/AndroidRuntime(25502):    at android.os.Looper.loop(Looper.java:137)
10-24 17:25:02.568: E/AndroidRuntime(25502):    at android.app.ActivityThread.main(ActivityThread.java:5368)
10-24 17:25:02.568: E/AndroidRuntime(25502):    at java.lang.reflect.Method.invokeNative(Native Method)
10-24 17:25:02.568: E/AndroidRuntime(25502):    at java.lang.reflect.Method.invoke(Method.java:525)
10-24 17:25:02.568: E/AndroidRuntime(25502):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1041)
10-24 17:25:02.568: E/AndroidRuntime(25502):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:857)
10-24 17:25:02.568: E/AndroidRuntime(25502):    at dalvik.system.NativeStart.main(Native Method)

РЕДАКТИРОВАТЬ 2: А, похоже, не поддерживается MediaRouteButton версии. Он обнаруживает устройство Chromecast в своем списке доступных, но, похоже, не подключается. (В этой версии нет метода setRouteSelector, как в версии support.v7), но я попробую поработать с этим и посмотреть, есть ли альтернатива.

РЕДАКТИРОВАНИЕ 3: я записал, что в итоге сделал, в разделе «Ответы».


person echoecho    schedule 24.10.2013    source источник
comment
Включите дополнительную информацию о (а) версии Android, для которой вы разрабатываете свое приложение, (2) журнале сбоев. Как только мы их увидим, мы надеемся, что сможем предоставить некоторую обратную связь.   -  person Ali Naddaf    schedule 24.10.2013
comment
@AliNaddaf Я обновил вопрос, включив в него журнал сбоев, но я знаю причину сбоя. Я проверил документ MediaRouteButton, и в нем говорится, что я должен использовать FragmentActivity, чтобы использовать кнопку. Итак, мой вопрос больше касается альтернатив использованию MediaRouteButton, и если FragmentActivity является требованием для использования Google Cast в целом. Я разрабатываю Android API 16. Спасибо за вашу помощь.   -  person echoecho    schedule 25.10.2013


Ответы (1)


Подобно этой настройке, я изменил источник MediaRouteButton, чтобы использовать API, предназначенные для поддержки Android API уровня 11+. В данном случае это действительно означало, что класс использовал android.app.FragmentManager вместо android.support.v4.app.FragmentManager. Таким образом, мне не нужно было переделывать мои существующие действия, чтобы расширять их от FragmentActivity.

person echoecho    schedule 31.10.2013