2014-07-24 15 views
10

Câu hỏi trong tiêu đề không phải là vấn đề thực sự. Tôi đã đi qua nhiều trang web và blog và đi để biết rằng Environment.OSVersion cung cấp cho bạn phiên bản hệ điều hành hiện tại của điện thoại bằng cách sử dụng ứng dụng của chúng tôi. Nhưng vấn đề là, Không có OSVersion trong môi trường lớp. Vui lòng tham khảo ảnh chụp màn hình để hiểu rõ hơn.Cách phát hiện phiên bản Windows Phone 8.1 OS theo cách lập trình?

Câu hỏi của tôi tại sao tôi không thể thấy thuộc tính OSVersion trong lớp Môi trường? Tui bỏ lỡ điều gì vậy? enter image description here

Tất cả các đề xuất và câu trả lời đều được đánh giá cao. Cảm ơn!

+0

này sẽ giúp bạn http://stackoverflow.com/questions/24122013/getting-windows-phone-version-and-device-name-in-windows-phone-8-1-xaml – Sajeetharan

+1

có thể trùng lặp http://stackoverflow.com/questions/17406850/how-can-we-check-if-the-current-os-is-win8-or-blue – vikky

Trả lời

13

Các ứng dụng Universal/WinRT chỉ hoạt động trong phiên bản 8.1, vì vậy phiên bản hệ điều hành chỉ có thể là 8.1. Khi họ làm cho wp8.2 hoặc wp9, có lẽ họ sẽ thêm một cách để kiểm tra những gì hệ điều hành phiên bản được cài đặt ...

Nếu bạn đang tìm kiếm các phiên bản firmware, bạn có thể lấy nó với:

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

Vấn đề là WP8.1 có nhiều phiên bản: http: // en.wikipedia.org/wiki/Windows_Phone_version_history Đôi khi nó là rất hữu ích để biết phiên bản chính xác bởi vì một số phiên bản có giới hạn hoặc lỗi. – Hong

+1

nhưng điều này không đúng với Windows 10 Mobile –

-2

đơn giản chỉ cần sử dụng dòng này để có được tên ứng dụng và Id, tên nhà xuất bản vv ...

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

Được sao chép từ câu hỏi bị lừa:

Windows Phone 8.1 Ứng dụng Silverlight có thể sử dụng API phiên bản .NET. Không có cơ chế được hỗ trợ để nhận số phiên bản trong ứng dụng Universal 8.1, nhưng bạn có thể thử sử dụng tính năng phản chiếu để có được lớp Windows 10 AnalyticsInfo, ít nhất sẽ cho bạn biết số phiên bản nếu bạn đang chạy trên Windows 10.

Lưu ý: Kiểm tra phiên bản hệ điều hành là hầu như luôn luôn điều sai, trừ khi bạn chỉ hiển thị nó cho người dùng (ví dụ: trong hộp "Giới thiệu") hoặc gửi đến máy chủ phân tích phía sau của bạn số crunching. Nó không nên được sử dụng để thực hiện bất kỳ quyết định thời gian chạy, bởi vì nói chung nó là một proxy nghèo cho bất cứ điều gì bạn đang thực sự cố gắng làm.

Đây là một mẫu:

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

Rõ ràng, bạn có thể cập nhật này để trả lại phiên bản, vv chứ không phải in nó vào debug console.

+1

Cảm ơn rất nhiều! Đối với mã dual-platform 8.1 + 10 của tôi, phương thức này hoạt động OK - nếu không có loại đó, tôi chỉ trả về 8.1. – Soonts

+1

Lưu ý: nếu 'GetRuntimeProperty' bị thiếu, hãy thêm' using System.Reflection; ' vào mục đích sử dụng của bạn. –

0

Tôi đã tìm thấy một cách khôn lanh để phát hiện xem thiết bị đang chạy Windows Phone 8.1 hay Windows Phone 10. Tôi đã so sánh 3 thiết bị khác nhau, Nokia Lumia 925 (wp 8.1) Nokia Lumia 735 (wp 10) và Nokia Lumia 930 (wp 10). Tôi nhận thấy rằng trên wp8.1 không có id thông tin thiết bị (nó gây ra một ngoại lệ không được thực hiện) nhưng nó tồn tại trên cửa sổ điện thoại 10 trên cả hai thiết bị thử nghiệm. Morover định dạng phiên bản firmware hệ thống có vẻ khác nhau giữa wp 8.1 và wp 10 (đầu tiên là xxxx.xxxxx.xxxx.xxxx trong khi định dạng thứ hai là xxxxx.xxxxx.xxxxx.xxxxx). Dưới đây chức năng của tôi:

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

tôi đã không có cơ hội để kiểm tra điều này trên các thiết bị hơn nữa, nhưng dường như cho đến nay để làm việc. Tôi sử dụng nó để phân biệt mã cho chức năng xếp hạng ứng dụng giữa Windows Phone 8.1 và Windows Phone 10, mà trong trường hợp cụ thể của tôi không UWP

Hope this helps

0

Nếu ứng dụng của bạn Silverlight dựa, bạn có thể sử dụng System.Environment.OSVersion.Version trên Windows Phone 8.0 và 8.1 cũng Dưới đây là một ví dụ về phương pháp chúng tôi sử dụng khi xác định có hiển thị hộp thoại chọn tham gia riêng của chúng tôi để theo dõi địa lý hoặc để Windows Mobile 10 có hộp thoại chọn tham gia riêng của mình hay không.

public static bool IsWindowsPhone8x() 
    { 
     try 
     { 
      Version version = System.Environment.OSVersion.Version; 
      return version.Major > 8 ? false : true; 
     } 
     catch (Exception) 
     { 
      return false; 
     } 
    } 
Các vấn đề liên quan