У меня есть приложение, которое отображает видео в подвиде, и было бы неплохо дать возможность отображать это видео на втором экране, таком как Apple TV, и иметь возможность использовать это освобожденное пространство для отображения дополнительных элементов управления.
Я нашел всевозможную помощь о том, как это сделать, но я упираюсь в стену еще до того, как выхожу из стартовых ворот.
Чтобы определить, что приложение запущено в среде с несколькими дисплеями, во всех примерах кода есть строка вроде...
if (UIScreen.Screens.Length > 1) {
// ...
}
(Я делаю это на С#/Xamarin, хотя сомневаюсь, что проблема связана с этим; во всяком случае, фрагменты кода на С#)
Моя проблема в том, что массив экранов всегда равен 1, что бы я ни делал. iPad работает под управлением iOS 11.2.5, и если я включу зеркальное отображение, iPad будет зеркально отражен, но, опять же, в массиве экранов есть только один элемент.
Также есть пара наблюдателей для обнаружения добавления/удаления экранов во время работы приложения. Я не видел конкретного кода Xamarin, но я предполагаю, что он выглядит так:
NSNotificationCenter.DefaultCenter.AddObserver(this, UIScreen.DidConnectNotification, NSKeyValueObservingOptions.New, IntPtr.Zero);
NSNotificationCenter.DefaultCenter.AddObserver(this, UIScreen.DidDisconnectNotification, NSKeyValueObservingOptions.New, IntPtr.Zero);
Во всяком случае, они никогда не срабатывают, даже если я добавляю/удаляю Apple TV или вхожу/выхожу из режима зеркального отображения на iPad.
Ой; также, если я сделаю
avPlayer.AllowsExternalPlayback = true;
avPlayer.UsesExternalPlaybackWhileExternalScreenIsActive = true;
тогда это тоже работает, как и ожидалось. Теперь видео отображается в полноэкранном режиме на Apple TV, а UIView на iPad, содержащий avPlayer, становится серым, а не показывает видео.
Однако это не то, что я ищу. Я хотел бы контролировать расположение обоих экранов, но это не так. (Хотя я хочу, чтобы видео было полноэкранным на Apple TV, я не хочу, чтобы это был AVPlayerViewController, и я хочу перепрофилировать экранную недвижимость, занимаемую просмотром видео на iPad)
В конце концов, все, что, как я думаю, мне нужно, это суметь получить
UIScreen.Screens.Length должен быть равен 2, когда я запускаю приложение.
В чем секрет того, как заставить UIScreen обнаруживать/сообщать о втором дисплее?