Перенос со среды выполнения Windows 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 продолжайте использовать размеры в эффективных пикселях (ранее – пиксели просмотра), чтобы пользовательский интерфейс адаптировался к различным разрешениям и коэффициентам масштабирования (см. раздел Эффективные пиксели, расстояние от экрана и коэффициенты масштабирования). Кроме того, используйте адаптивные триггеры и параметры диспетчера визуальных состояний для адаптации пользовательского интерфейса к размеру окна (см. Руководство по приложениям 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. Поэтому, если ваше приложение отображает собственный настраиваемый запрос на продолжение или если оно предоставляет переключатель включения и выключения, следует удалить этот запрос, чтобы пользователь получал только один запрос.