Как программно определить версию ОС Windows Phone 8.1?

Вопрос в заголовке не является настоящей проблемой. Я просмотрел множество сайтов и блогов и узнал, что Environment.OSVersion предоставляет вам текущую версию ОС телефона с помощью нашего приложения. Но проблема в том, что в классе Environment нет OSVersion. Пожалуйста, обратитесь к скриншоту для лучшего понимания.

Мой вопрос, почему я не вижу свойство OSVersion в классе Environment? Я что-то упустил?введите здесь описание изображения


person Apoorva    schedule 24.07.2014    source источник
comment
Это должно помочь вам stackoverflow.com/questions/24122013/   -  person Sajeetharan    schedule 24.07.2014
comment
Возможный дубликат stackoverflow.com/questions/17406850/   -  person vikky    schedule 24.07.2014


Ответы (6)


Вы не можете получить версию ОС в Windows 8.1. Проверьте следующую ссылку для того же — https://social.msdn.microsoft.com/Forums/windowsapps/en-US/2b455331-3bad-4d26-b615-a59d0e05d0dd/how-to-get-os-version-on-window-phone?forum=wpdevelop

person user2220762    schedule 06.02.2015

Универсальные приложения/WinRT работают только в wp 8.1, поэтому версия ОС может быть только 8.1. Когда они сделают wp8.2 или wp9, они, вероятно, добавят способ проверить, какая версия ОС установлена...

Если вам нужна версия прошивки, вы можете получить ее с помощью:

    Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation deviceInfo = new Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation();
    var firmwareVersion = deviceInfo.SystemFirmwareVersion;
person the_nuts    schedule 24.07.2014
comment
Проблема в том, что WP8.1 имеет много версий: en.wikipedia.org/wiki/Windows_Phone_version_history Иногда очень полезно знать точную версию, потому что некоторые версии имеют ограничения или ошибки. - person Hong; 21.04.2015
comment
но это не так с Windows 10 Mobile - person Soheil Ghahremani; 29.11.2015

Скопировано из обманутого вопроса:

Приложения Windows Phone 8.1 Silverlight могут использовать API версии .NET. В приложениях Universal 8.1 нет поддерживаемого механизма для получения номера версии, но вы можете попробовать использовать отражение, чтобы получить класс Windows 10 AnalyticsInfo, который, по крайней мере, сообщит вам номер версии, если вы работаете в Windows 10.

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

Вот пример:

var analyticsInfoType = Type.GetType(
  "Windows.System.Profile.AnalyticsInfo, Windows, ContentType=WindowsRuntime");
var versionInfoType = Type.GetType(
  "Windows.System.Profile.AnalyticsVersionInfo, Windows, ContentType=WindowsRuntime");
if (analyticsInfoType == null || versionInfoType == null)
{
  Debug.WriteLine("Apparently you are not on Windows 10");
  return;
}

var versionInfoProperty = analyticsInfoType.GetRuntimeProperty("VersionInfo");
object versionInfo = versionInfoProperty.GetValue(null);
var versionProperty = versionInfoType.GetRuntimeProperty("DeviceFamilyVersion");
object familyVersion = versionProperty.GetValue(versionInfo);

long versionBytes;
if (!long.TryParse(familyVersion.ToString(), out versionBytes))
{
  Debug.WriteLine("Can't parse version number");
  return;
}

Version uapVersion = new Version((ushort)(versionBytes >> 48),
  (ushort)(versionBytes >> 32),
  (ushort)(versionBytes >> 16),
  (ushort)(versionBytes));

Debug.WriteLine("UAP Version is " + uapVersion);

Очевидно, вы можете обновить это, чтобы вернуть версию и т. д., а не печатать ее в консоли отладки.

person Peter Torr - MSFT    schedule 02.12.2015
comment
Большое спасибо! Для моего двухплатформенного кода 8.1+10 этот метод работает нормально — если такого типа нет, я просто возвращаю 8.1. - person Soonts; 21.12.2015
comment
Примечание: если GetRuntimeProperty отсутствует, добавьте using System.Reflection; к своему использованию. - person Heinrich Ulbricht; 03.02.2016

Я нашел хитрый способ определить, работает ли устройство под управлением Windows Phone 8.1 или Windows Phone 10. Я сравнил 3 разных устройства: Nokia Lumia 925 (wp 8.1), Nokia Lumia 735 (wp 10) и Nokia Lumia 930 (wp 10). Я заметил, что на wp8.1 нет идентификатора информации об устройстве (он вызывает нереализованное исключение), но он существует на Windows Phone 10 на обоих протестированных устройствах. Кроме того, формат версии системной прошивки отличается для wp 8.1 и wp 10 (первый — xxxx.xxxxx.xxxx.xxxx, а второй — xxxxx.xxxxx.xxxxx.xxxxx). Ниже моей функции:

        /// <summary>
        /// Indicates if this device is running a version of Windows Phone 8.1. It use a dirty trick for detecting the OS major version
        /// based on the system firmware version format (8.1 is xxxx.xxxxx.xxxx.xxxx while 10 is xxxxx.xxxxx.xxxxx.xxxxx )
        /// moreover, the "deviceInfo.id" is not implemented on Windows Phone 8.1, but it is on Windows Phone 10
        /// </summary>
        /// <returns></returns>
        public static bool liIsWindowsPhone81(bool basedOnDeviceInfoId)
        {
            EasClientDeviceInformation deviceInfo = new Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation();
            bool isWin81 = false;
            if (basedOnDeviceInfoId)
            {
                try
                {
                    var deviceInfoId = deviceInfo.Id;
                }
                catch
                {
                    isWin81 = true;
                }
            }
            else
            {
                string firmwareVersion = deviceInfo.SystemFirmwareVersion.Trim();
                string[] parts = firmwareVersion.Split('.');
                if (parts[0].Length == 4 && parts[1].Length == 5 && parts[2].Length == 4 && parts[3].Length == 4)
                {
                    isWin81 = true;
                }
            }

            return isWin81;
        }

введите здесь описание изображения

У меня не было возможности проверить это на других устройствах, но пока, похоже, работает. Я использую его, чтобы различать код функции рейтинга приложений между Windows Phone 8.1 и Windows Phone 10, которые в моем конкретном случае не являются UWP.

Надеюсь это поможет

person Luca Iaco    schedule 05.06.2016

Если ваше приложение основано на Silverlight, вы можете использовать System.Environment.OSVersion.Version в Windows Phone 8.0 и 8.1, а также в Windows Mobile 10.

Вот пример метода, который мы используем, когда определяем, следует ли отображать собственное диалоговое окно согласия на геоотслеживание или позволять Windows Mobile 10 отображать собственное диалоговое окно согласия.

    public static bool IsWindowsPhone8x()
    {
        try
        {
            Version version = System.Environment.OSVersion.Version;
            return version.Major > 8 ? false : true;
        }
        catch (Exception)
        {
            return false;
        }
    }
person Gyle Iverson    schedule 26.02.2017

Просто используйте эту строку, чтобы получить имя и идентификатор приложения, имя издателя и т. д.

string name = Windows.ApplicationModel.Package.Current.DisplayName;
person Zia Ur Rahman    schedule 26.08.2015