Я работаю над приложением, которое может передавать некоторые данные на Chromecast через remote display. В моем приложении у меня может быть поведение, когда пользователь может покинуть экран и через некоторое время вернуться туда еще раз. Но я должен знать, что устройство подключено к Chromecast, потому что приложение должно показывать другие данные таким образом. Два класса ниже, которые я использую для подключения к Chromecast (только эти два класса, я больше ничего не использую). Я подумал, может быть, у MediaRouter есть некоторые данные о соединении, но я ничего не нашел. Так что мой вопрос, как обнаружить, что текущее устройство подключено к CHROMECAST &Как узнать, что устройство подключено к chromecast
ChromecastController.java
public class ChromecastController implements MediaRouterCallback.IChromecastCallback {
private MediaRouterCallback mMediaRouterCallback;
private MediaRouteSelector mMediaRouteSelector;
private MediaRouter mMediaRouter;
public void initMediaRouter(MediaRouteButton mediaRouteButton, FragmentActivity activity, MediaRouterCallback.IChromecastCallback callback) {
// Configure Cast device discovery
mMediaRouter = MediaRouter.getInstance(M2MAppImpl.getContext());
mMediaRouteSelector = new MediaRouteSelector.Builder()
.addControlCategory(
CastMediaControlIntent.categoryForCast(CAST_ID))
.build();
mediaRouteButton.setRouteSelector(mMediaRouteSelector);
mMediaRouterCallback = new MediaRouterCallback(activity, M2MApp.getContext());
}
public void onStart() {
mMediaRouter.addCallback(mMediaRouteSelector, mMediaRouterCallback,
MediaRouter.CALLBACK_FLAG_PERFORM_ACTIVE_SCAN);
}
public void onStop() {
mMediaRouter.removeCallback(mMediaRouterCallback);
}
}
MediaRouterCallback.java
public class MediaRouterCallback extends MediaRouter.Callback {
public static final String TAG = MediaRouterCallback.class.getName();
private CastDevice mSelectedDevice;
private FragmentActivity activity;
private Context mContext;
public MediaRouterCallback(FragmentActivity activity, Context context){
this.activity = activity;
mContext = context;
}
@Override
public void onRouteSelected(MediaRouter router, MediaRouter.RouteInfo info) {
Log.d(TAG, "onRouteSelected " + info.getName());
mSelectedDevice = CastDevice.getFromBundle(info.getExtras());
Intent intent = new Intent(mContext,
activity.getClass());
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent notificationPendingIntent = PendingIntent.getActivity(
mContext, 0, intent, 0);
CastRemoteDisplayLocalService.NotificationSettings settings =
new CastRemoteDisplayLocalService.NotificationSettings.Builder()
.setNotificationPendingIntent(notificationPendingIntent).build();
CastRemoteDisplayLocalService.startService(
M2MApp.getContext(),
PresentationService.class, ChromecastController.CAST_ID,
mSelectedDevice, settings,
new CastRemoteDisplayLocalService.Callbacks() {
@Override
public void onServiceCreated(CastRemoteDisplayLocalService castRemoteDisplayLocalService) {
Log.d(TAG, "CHROMECAST onServiceCreated");
}
@Override
public void onRemoteDisplaySessionStarted(
CastRemoteDisplayLocalService service) {
Log.d(TAG, "CHROMECAST onRemoteDisplaySessionStarted");
// initialize sender UI
}
@Override
public void onRemoteDisplaySessionError(
Status errorReason){
Log.d(TAG, "CHROMECAST onRemoteDisplaySessionError " + errorReason);
}
});
}
@Override
public void onRouteUnselected(MediaRouter router, MediaRouter.RouteInfo info) {
Log.d(TAG, "onRouteUnselected " + info.getName());
}
}
Но что, если пользователь покинет этот экран и вернется туда снова. Как я узнаю о RouteInfo таким образом? – Dima
Вы получите обратный вызов onRouteUnselected, когда он снова отключится от chromecast и onRouteSelected, когда он снова подключится. – leoderprofi
Но если пользователь покидает экран, приложение не будет иметь этот обратный вызов (потому что этот обратный вызов подключен к экрану). И когда он вернется на экран назад, он ничего не получит (потому что хромометр уже подключен или отключен). – Dima