У меня есть приложение для 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: я записал, что в итоге сделал, в разделе «Ответы».