Как обнаружить устройство Chromecast с помощью Android?
Я хотел бы найти устройство Chromecast и отрегулировать громкость.
1 ответ
Решение
- Получить устройство
- Получите ваше устройство в белый список (вам понадобится серийный номер устройства и URL для вашего приемника HTML5)
- Вам будет отправлено два APPID (разработка / производство)
- В вашей среде разработки убедитесь, что обновление до Android Support Library v18
- Вы будете использовать MediaRouter
- инициализировать
import com.google.cast.CastContext;
Context applicationContext = …; CastContext castContext = new
CastContext(applicationContext);
- Вам понадобится MediaRouteButton
< android.support.v7.app.MediaRouteButton
android:id="@+id/media_route_button"
android:mediaRouteTypes="user"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="visible" />
import com.google.cast.CastContext;
import com.google.cast.CastDevice;
import com.google.cast.MediaRouteAdapter;
import com.google.cast.MediaRouteHelper;
import com.google.cast.MediaRouteStateChangeListener;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.MediaRouteButton;
import android.support.v7.media.MediaRouteSelector;
import android.support.v7.media.MediaRouter;
import android.support.v7.media.MediaRouter.RouteInfo;
public class MyCastActivity extends FragmentActivity implements MediaRouteAdapter {
private MediaRouteButton mMediaRouteButton;
private MediaRouter mMediaRouter;
private MediaRouteSelector mMediaRouteSelector;
private MediaRouter.Callback mMediaRouterCallback;
private CastDevice mSelectedDevice;
private MediaRouteStateChangeListener mRouteStateListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_cast_activity);
mMediaRouteButton = (MediaRouteButton) findViewById(R.id.media_route_button);
- Построить
CastContext
,
mCastContext = new CastContext(getApplicationContext());
- Зарегистрируйте MinimalCastMediaRouteProvider
позвонив MediaRouteHelper.registerMinimalMediaRouteProvider
(), передавая объект, который реализует MediaRouteAdapter
интерфейс.
MediaRouteHelper.registerMinimalMediaRouteProvider(mCastContext, this);
mMediaRouter = MediaRouter.getInstance(getApplicationContext());
- Построить
MediaRouteSelector
позвонивMediaRouteHelper.buildMediaRouteSelector()
, Существует две формы этого метода: первая не принимает параметров, а вторая - имя приложения-получателя и / или список протоколов сообщений. Эта последняя форма используется для выполнения фильтрации устройства, эквивалентной той, которая выполняется SDKApplicationSupportFilterListener
,
mMediaRouteSelector = MediaRouteHelper.buildMediaRouteSelector( MediaRouteHelper.CATEGORY_CAST);
- Назначьте MediaRouteSelector на MediaRouteButton.
mMediaRouteButton.setRouteSelector(mMediaRouteSelector);
- Реализовать
MediaRouter.Callback
и добавить его вMediaRouter
, проходяCALLBACK_FLAG_REQUEST_DISCOVERY
кMediaRouter
начать открытие. Когда пользователь выбирает или отменяет выбор маршрута в средстве выбора GUI, будет вызываться соответствующий метод в этом интерфейсе обратного вызова.
mMediaRouterCallback = new MyMediaRouterCallback(); } @Override protected void onStart() { super.onStart(); mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback, MediaRouter.CALLBACK_FLAG_REQUEST_DISCOVERY); } @Override protected void onStop() { mMediaRouter.removeCallback(mMediaRouterCallback); super.onStop(); } @Override protected void onDestroy() { MediaRouteHelper.unregisterMediaRouteProvider(mCastContext); mCastContext.dispose(); super.onDestroy(); }
- в
MediaRouter.Callback
"sonRouteSelected()
обратный звонок, позвонитеMediaRouteHelper.requestCastDeviceForRoute()
получить объект CastDevice для выбранного медиа-маршрута, а такжеMediaRouteStateChangeListener
об этом нужно будет уведомлять всякий раз, когда изменяется объем маршрута или состояние соединения.
private class MyMediaRouterCallback extends MediaRouter.Callback { @Override public void onRouteSelected(MediaRouter router, RouteInfo route) { MediaRouteHelper.requestCastDeviceForRoute(route); } @Override public void onRouteUnselected(MediaRouter router, RouteInfo route) { mSelectedDevice = null; mRouteStateListener = null; } } // MediaRouteAdapter implementation @Override public void onDeviceAvailable(CastDevice device, MediaRouteStateChangeListener listener) { mSelectedDevice = device; mRouteStateListener = listener; } @Override public void onSetVolume(double volume) { // Handle volume change. } @Override public void onUpdateVolume(double delta) { // Handle volume change. }
}