2013-10-15 1 views
2

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

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 Button, сразу после того, как он будет обнаружен в MediaRouter.Callback?

ответ

3

Try вызова

mediaRouter.selectRoute(route); 

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

+0

Прекрасно работает! Я добавил selectRoute в onRouteAdded и теперь вызываю MediaRouteHelper.requestCastDeviceForRoute из onRouteSelected. И onDeviceAvailable называется успешно! Отличное решение, спасибо! – Nikita

+0

Подтверждено, но нет 15 очков репутации для голосования. Сожалею. Когда я получу 15 очков, я проголосую. – Nikita

0

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

+0

Первый: «начать потоковое автоматически, как только система« обнаружит »литое устройство» –

+0

Да, первый. И ответ от @AlonBurg мне помог. – Nikita

0

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

+0

Предположим, мы хотим применить это только в том случае, если он обнаруживает один маршрут. Почему вызов 'MediaRouteHelper.requestCastDeviceForRoute (route)' изнутри onRouteAdded() не работает так же, как при вызове onRouteSelected(). Есть ли планы опубликовать источник SDK? –

+0

Да, я нарушаю поток. Но это приложение не предназначено для публичного доступа. Он предназначен для клиентов нашей компании, и они хотят сразу же транслировать на ТВ одновременно с началом приложения без каких-либо дальнейших действий. В любом случае, спасибо за рекомендацию. – Nikita