Поделиться через


Портирование Windows Runtime 8.x на UWP для ввода-вывода, устройств и модели приложений

Предыдущая тема была перенос XAML и пользовательского интерфейса.

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

Жизненный цикл приложения (управление жизненным циклом процесса)

Для универсального приложения 8.1 существует двухсекундное «окно задержки» между тем, как приложение становится неактивным, и тем, как система вызывает событие приостановки. Использование этого окна задержки в качестве дополнительного времени для приостановки состояния небезопасно, и для приложения универсальной платформы Windows (UWP) не существует окна задержки; событие приостановки вызывается, как только приложение становится неактивным.

Дополнительную информацию см. в разделе "Цикл жизни приложений".

Фоновый звук

Для свойства MediaElement.AudioCategory использование ForegroundOnlyMedia и BackgroundCapableMedia устарело для приложений Windows 10. Вместо этого используйте модель приложения Магазина Windows Phone. Дополнительные сведения см. в разделе "Фоновый звук".

Обнаружение платформы, на котором запущено приложение

Изменение подхода к таргетированию приложений происходит с Windows 10. Новая концептуальная модель заключается в том, что приложение предназначено для универсальной платформы Windows (UWP) и выполняется на всех устройствах Windows. Затем он может выбрать включение функций, которые являются эксклюзивными для определенных семейств устройств. При необходимости приложение также имеет возможность ограничить свою направленность на одно или несколько семейств устройств. Дополнительные сведения о семействах устройств и способах выбора целевого семейства устройств см. в руководстве по приложениям UWP.

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

Заметка Рекомендуется не использовать семейство операционных систем или устройств для обнаружения наличия функций. Определение текущей операционной системы или семейства устройств обычно не является лучшим способом определить, присутствует ли определенная операционная система или семейство устройств. Вместо того чтобы обнаруживать семейство операционной системы или семейство устройств (и номер версии), следует протестировать наличие самой возможности (см. условная компиляция и адаптивный код). Если требуется определенная операционная система или семейство устройств, обязательно используйте ее как минимальную поддерживаемую версию, а не проектируйте тест для этой одной версии.

 

Чтобы настроить пользовательский интерфейс приложения на разных устройствах, рекомендуется использовать несколько методов. Продолжайте использовать автоматически масштабируемые элементы и динамические панели макета, как вы всегда это делали. В разметке XAML продолжайте использовать размеры в эффективных пикселях (прежнее название — просмотровые пиксели), чтобы пользовательский интерфейс адаптировался к различным разрешениям и коэффициентам масштабирования (см. Эффективные пиксели, расстояние просмотра и коэффициенты масштабирования). И используйте адаптивные триггеры и средства задания visual State Manager для адаптации пользовательского интерфейса к размеру окна (см. руководство по приложениям UWP).

Однако, если у вас есть сценарий, в котором неизбежно определить семейство устройств, вы можете это сделать. В этом примере мы используем класс AnalyticsVersionInfo для перехода на страницу, адаптированную для семейства мобильных устройств, где это необходимо, и мы обязательно вернемся к странице по умолчанию в противном случае.

   if (Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily == "Windows.Mobile")
        rootFrame.Navigate(typeof(MainPageMobile), e.Arguments);
    else
        rootFrame.Navigate(typeof(MainPage), e.Arguments);

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

var qualifiers = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().QualifierValues;
string deviceFamilyName;
bool isDeviceFamilyNameKnown = qualifiers.TryGetValue("DeviceFamily", out deviceFamilyName);

Кроме того, см. раздел "Условная компиляция" и адаптивный код.

Местоположение

Когда приложение, объявляющее возможность расположения в манифесте пакета приложения, запускается в Windows 10, система предложит пользователю предоставить согласие. Это верно, является ли приложение приложением Магазина Windows Phone или приложением Windows 10. Таким образом, если ваше приложение отображает собственный настраиваемый запрос на согласие или предоставляет переключатель включения-выключения, вам следует удалить это, чтобы конечный пользователь получал уведомление только один раз.