Не удалось заставить Surface Duo использовать оба экрана с помощью Xamarin

Я пытаюсь создать проект Xamarin Forms для Surface Duo. Проект выполняется, но оба экрана не используются. Я выполнил шаги в Xamarin для Surface Duo - Dual-screen | Документы Microsoft:

  • Обновлен указатель на SDK.

  • Добавлено Xamarin.Forms.DualScreen.DualScreenService.Init(this); к mainactivity.cs.

  • Изменен аббрибьют Activity, чтобы включить: ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.UiMode.

  • Включен пакет Xamarin.DuoSdk в приложение для Android.

  • Во время чтения вывода эмулятора в одной строке рекомендовалось отключить Hyper-V с помощью команды bcdedit, что я и сделал.

  • Выбрано <build> (Android 10.0 - API 29)

Я загрузил некоторые образцы (Sketch 360 и демонстрации с двумя экранами), но не смог заставить их использовать оба экрана. Я запустил демонстрационные версии, опубликованные на Get, и обновил пакеты, но безуспешно. Я проверил настройки телефона в эмуляторе, чтобы узнать, есть ли настройка для включения обоих экранов, но ничего не нашел. В выводе эмулятора есть некоторые ошибки, предупреждения, но не знаю, как их исправить.

Выход эмулятора

      emulator: Silencing all qWarning(); use qCWarning(...) instead: QT_LOGGING_RULES=default.warning=false
Failed to open /qemu.conf, err: 2
emulator: INFO: QtLogger.cpp:68: Critical: UpdateLayeredWindowIndirect failed for ptDst=(1283, 327), size=(700x21), dirty=(700x108 0, 0) (A device attached to the system is not functioning.) ((null):0, (null))
emulator: INFO: QtLogger.cpp:68: Critical: UpdateLayeredWindowIndirect failed for ptDst=(1283, 327), size=(700x21), dirty=(700x21 0, 0) (A device attached to the system is not functioning.) ((null):0, (null))
emulator: INFO: QtLogger.cpp:68: Critical: Uncaught TypeError: Cannot read property 'update' of undefined (qrc:/html/js/location-mock-web-channel.js:130, (null))

Сборка вывода

      System.InvalidCastException: Unable to cast object of type 'Mono.Debugger.Soft.PointerValue' to type 'Mono.Debugger.Soft.PrimitiveValue'.
System.InvalidCastException: Unable to cast object of type 'Mono.Debugger.Soft.PointerValue' to type 'Mono.Debugger.Soft.PrimitiveValue'.
System.InvalidCastException: Unable to cast object of type 'Mono.Debugger.Soft.PointerValue' to type 'Mono.Debugger.Soft.PrimitiveValue'.
02-06 20:34:52.574 W/libc    ( 3873): Unable to set property "qemu.gles" to "1": connection failed; errno=13 (Permission denied)
02-06 20:34:54.961 W/OpenGLRenderer( 3873): Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...

2 ответа

Если вы спрашиваете, как заставить приложение использовать оба экрана программно, а не пользователь, выполняющий действие после запуска приложения, это невозможно.

Смотрите пояснения здесь:https://docs.microsoft.com/en-us/dual-screen/introduction

Когда пользователь запускает приложение, его основное окно открывается в развернутом виде и занимает всю ширину и высоту одного экрана.

Пользователь несет ответственность за охват приложения, это не состояние, в которое приложение входит программно.

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

Запустите Surface Duo Emulator for Visual Studioчтобы запустить эмулятор Surface Duo. Если у вас есть какие-либо проблемы с эмулятором, вы можете устранить неполадки по ссылке ниже. https://docs.microsoft.com/en-us/dual-screen/xamarin/use-emulator?tabs=windows#update-the-pointer-to-your-android-sdk

Установите пакет через NuGet. Xamarin.Forms.DualScreen: https://www.nuget.org/packages/Xamarin.Forms.DualScreen

Используйте xaml, как показано ниже.

       <dualScreen:TwoPaneView>
    <dualScreen:TwoPaneView.Pane1>
        <StackLayout>
            <Label Text="Pane1 Content" />
        </StackLayout>
    </dualScreen:TwoPaneView.Pane1>
    <dualScreen:TwoPaneView.Pane2>
        <StackLayout>
            <Label Text="Pane2 Content" />
        </StackLayout>
    </dualScreen:TwoPaneView.Pane2>
</dualScreen:TwoPaneView>

Запустите проект с эмулятором <build> (Android 10.0 – API 29)

Другие вопросы по тегам