requestCastDeviceForRoute в onRouteAdded

Я разрабатываю приложение для Chromecast. Я попробовал образец Android из https://github.com/googlecast/cast-android-sample, и он работает нормально - я могу щелкнуть значок Cast, выбрать устройство и начать потоковую передачу. Итак, MediaRouter.Callback выглядит так:

private class MyMediaRouterCallback extends MediaRouter.Callback {
    @Override
    public void onRouteSelected(MediaRouter router, RouteInfo route) {
        MediaRouteHelper.requestCastDeviceForRoute(route);
    }
}

И это работает. Но я хочу начать потоковую передачу на своем устройстве без кнопки потоковой передачи. Итак, я изменил этот обратный вызов на:

private class MyMediaRouterCallback extends MediaRouter.Callback {
    @Override
    public void  onRouteAdded (MediaRouter router, RouteInfo route)
        MediaRouteHelper.requestCastDeviceForRoute(route);
    }
}

Но это не работает. Этот обратный вызов срабатывает, requestCastDeviceForRoute возвращает true с требуемым устройством (я вижу это по route.getName()), но onDeviceAvailable из CastSampleActivity никогда не вызывался. Я пробовал отложенный вызов requestCastDeviceForRoute с помощью Handler.postDelayed, и все равно ничего.

Итак, как правильно использовать requestCastDeviceForRoute для потоковой передачи на устройстве Chromecast без кнопки Media, сразу после того, как он будет обнаружен в MediaRouter.Callback?


person Nikita    schedule 15.10.2013    source источник


Ответы (3)


Попробуйте позвонить

mediaRouter.selectRoute(route);

вместо использования MediaRouterHelper. Это сработало для меня при звонке из onRouteAdded()

person Alon Burg    schedule 15.10.2013
comment
Работает отлично! Я добавил selectRoute в onRouteAdded и теперь вызываю MediaRouteHelper.requestCastDeviceForRoute из onRouteSelected. И onDeviceAvailable вызывается успешно! Отличное решение, спасибо! - person Nikita; 16.10.2013
comment
Подтверждено, но нет 15 очков репутации для голосования. Извини. Когда наберу 15 баллов - буду голосовать. - person Nikita; 16.10.2013

Просто чтобы убедиться, что я понимаю ваш вопрос, вы пытаетесь запустить потоковую передачу автоматически, как только система «обнаружит» устройство трансляции, без нажатия пользователем значка трансляции и выбора устройства? Или вы пытаетесь начать потоковую передачу мультимедиа сразу после того, как пользователь щелкнет значок трансляции и выберет цель (т. е. избавится от необходимости нажимать кнопку «Воспроизвести»)?

person Ali Naddaf    schedule 15.10.2013
comment
Первый: запуск потоковой передачи автоматически, как только система обнаружит транслируемое устройство. - person Alon Burg; 15.10.2013
comment
Да, первый. И ответ @AlonBurg помог мне. - person Nikita; 16.10.2013

Рекомендуемый поток — позволить пользователю выбрать устройство вручную, поэтому то, что вы пытаетесь сделать, полностью нарушает поток. Что может ожидать пользователь, если в сети есть более одного устройства Chromecast? Поэтому настоятельно не рекомендуется идти по этому пути.

person Ali Naddaf    schedule 15.10.2013
comment
Предположим, мы хотим применить это только в случае обнаружения одного маршрута. Почему вызов MediaRouteHelper.requestCastDeviceForRoute(route) из onRouteAdded() не работает так же, как при вызове из onRouteSelected(). Планируется ли публикация исходного кода SDK? - person Alon Burg; 16.10.2013
comment
Да, я прерываю поток. Но это приложение не предназначено для общего доступа. Это для клиентов нашей компании, и они хотят сразу видеть трансляцию на ТВ одновременно с запуском приложения, без каких-либо дополнительных действий. В любом случае, спасибо за рекомендацию. - person Nikita; 16.10.2013