2014-07-24 20 views
10

Pytanie w tytule nie jest prawdziwym problemem. Przeszedłem przez wiele stron i blogów i dowiedziałem się, że Environment.OSVersion udostępnia aktualną wersję systemu operacyjnego telefonu za pomocą naszej aplikacji. Ale problem polega na tym, że nie ma OSVersion w klasie Environment. Proszę przejrzeć zrzut ekranu, aby lepiej zrozumieć.Jak programowo wykrywać wersję systemu operacyjnego Windows Phone 8.1?

Moje pytanie dlaczego nie widzę właściwości OSVersion w klasie Środowisko? Czy czegoś brakuje? enter image description here

Wszystkie sugestie i odpowiedzi doceniane. Dzięki!

+0

To powinno pomóc http://stackoverflow.com/questions/24122013/getting-windows-phone-version-and-device-name-in-windows-phone-8-1-xaml – Sajeetharan

+1

Możliwa duplikat http://stackoverflow.com/questions/17406850/how-can-we-check-if-the-current-os-is-win8-or-blue – vikky

Odpowiedz

13

Aplikacje Universal/WinRT działają tylko w wersji 8.1, więc wersja systemu operacyjnego może mieć tylko 8,1. Kiedy oni wp8.2 lub WP9, oni chyba dodawać sposób sprawdzić, co jest zainstalowana wersja systemu operacyjnego ...

Jeśli szukasz wersji oprogramowania, można go pobrać z:

Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation deviceInfo = new Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation(); 
    var firmwareVersion = deviceInfo.SystemFirmwareVersion; 
+0

Problem polega na tym, że WP8.1 ma wiele wersji: http: // en.wikipedia.org/wiki/Windows_Phone_version_history Czasami bardzo pomocna jest znajomość dokładnej wersji, ponieważ niektóre wersje mają ograniczenia lub błędy. – Hong

+1

to jednak nie jest prawdą w przypadku Windows 10 Mobile –

-2

Wystarczy użyć tej linii, aby uzyskać nazwę aplikacji i identyfikator, nazwę wydawcy itp ...

string name = Windows.ApplicationModel.Package.Current.DisplayName; 
12

Skopiowano z zadanego pytania:

Aplikacje Windows Phone 8.1 Aplikacje Silverlight mogą korzystać z interfejsów API .NET. Nie ma obsługiwanego mechanizmu, aby uzyskać numer wersji w aplikacjach Universal 8.1, ale możesz spróbować użyć odbicia, aby uzyskać klasę Windows 10 AnalyticsInfo, która przynajmniej podpowie Ci numer wersji, jeśli używasz systemu Windows 10.

Uwaga: Sprawdzanie wersji OS to prawie zawsze niewłaściwą czynność, chyba że po prostu wyświetlasz ją użytkownikowi (np. W polu "Informacje") lub przesyłasz ją na serwer analityczny zaplecza dla numer chrupanie. Nie należy go używać do podejmowania jakichkolwiek decyzji w czasie wykonywania, ponieważ generalnie jest to słabe proxy dla niezależnie od tego, co faktycznie próbujesz zrobić, aby uzyskać.

Oto przykład:

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); 

Oczywiście można aktualizować ten powrót wersję itp zamiast je drukować do konsoli debugowania.

+1

Wielkie dzięki! Dla mojego kodu 8.1 + 10 o podwójnej platformie, ta metoda działa dobrze - jeśli nie ma tego typu, po prostu zwrócę 8.1. – Soonts

+1

Uwaga: jeśli brakuje 'GetRuntimeProperty', dodaj' using System.Reflection; ' do swoich zastosowań. –

0

Znalazłem trudny sposób na wykrycie, czy urządzenie działa pod kontrolą systemu Windows Phone 8.1 lub Windows Phone 10. Porównałem 3 różne urządzenia, Nokia Lumia 925 (wp 8.1) i Nokia Lumia 735 (wp 10) oraz Nokia Lumia 930 (wp 10). Zauważyłem, że na wp8.1 nie ma identyfikatora urządzenia (powoduje to wyjątek nie zaimplementowany), ale istnieje on na Windows Phone 10 na obu testowanych urządzeniach. W większości przypadków format wersji oprogramowania układowego wydaje się być inny niż wp 8.1 i wp 10 (pierwszy to xxxx.xxxxx.xxxx.xxxx, a drugi to xxxxx.xxxxx.xxxxx.xxxxx). Poniżej mojej funkcji:

 /// <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; 
     } 

enter image description here

Nie miałem okazję przetestować to na kolejnych urządzeń, ale jak dotąd wydaje się działać. Używam go do rozróżniania kodu funkcji oceny aplikacji między Windows Phone 8.1 i Windows Phone 10, że w moim konkretnym przypadku nie są UWP

nadzieję, że to pomaga

0

Jeśli Twoja aplikacja jest oparta Silverlight, można użyć System.Environment.OSVersion.Version całej Windows Phone 8.0 i 8.1, a także jako Windows Mobile 10.

Oto przykład metody, którą stosujemy przy ustalaniu, czy wyświetlić okno dialogowe wyboru dla geolokalizacji, czy pozwolić systemowi Windows Mobile 10 na zaprezentowanie własnego okna dialogowego.

public static bool IsWindowsPhone8x() 
    { 
     try 
     { 
      Version version = System.Environment.OSVersion.Version; 
      return version.Major > 8 ? false : true; 
     } 
     catch (Exception) 
     { 
      return false; 
     } 
    } 
Powiązane problemy