In this article I’ll show you few useful tips when developing any Windows 10 UWP app – how to get basic data about current device, operating system and application. You might need all that info for logging or custom app analytics or maybe in a footer of a support mail generated in the app.
The goal – I want to know in my application:
- current OS family – phone/desktop/…
- current OS build number – 10.0.10240.16413
- current OS architecture – x86/x64/ARM
- current App Display Name – Battery Tile for instance
- current App Version – 3.0.2.0
- current Device manufacturer – Nokia
- current Device model – Lumia 1520
Since Windows Phone 8 basically all APIs we used to gather these data have changed, but I’ve done the work for you, here’s a helper class with all these properties:
using Windows.ApplicationModel; using Windows.Security.ExchangeActiveSyncProvisioning; using Windows.System.Profile; ... public static class Info { public static string SystemFamily { get; } public static string SystemVersion { get; } public static string SystemArchitecture { get; } public static string ApplicationName { get; } public static string ApplicationVersion { get; } public static string DeviceManufacturer { get; } public static string DeviceModel { get; } static Info() { // get the system family name AnalyticsVersionInfo ai = AnalyticsInfo.VersionInfo; SystemFamily = ai.DeviceFamily; // get the system version number string sv = AnalyticsInfo.VersionInfo.DeviceFamilyVersion; ulong v = ulong.Parse(sv); ulong v1 = (v & 0xFFFF000000000000L) >> 48; ulong v2 = (v & 0x0000FFFF00000000L) >> 32; ulong v3 = (v & 0x00000000FFFF0000L) >> 16; ulong v4 = (v & 0x000000000000FFFFL); SystemVersion = $"{v1}.{v2}.{v3}.{v4}"; // get the package architecure Package package = Package.Current; SystemArchitecture = package.Id.Architecture.ToString(); // get the user friendly app name ApplicationName = package.DisplayName; // get the app version PackageVersion pv = package.Id.Version; ApplicationVersion = $"{pv.Major}.{pv.Minor}.{pv.Build}.{pv.Revision}"; // get the device manufacturer and model name EasClientDeviceInformation eas = new EasClientDeviceInformation(); DeviceManufacturer = eas.SystemManufacturer; DeviceModel = eas.SystemProductName; } } |
Some comments:
The property DeviceFamilyVersion contains plain string with a long value containing the OS version. All we need to do is convert it back from string to long and convert each short number back to readable format.
The object Package contains lot of useful data including Package Family Name. You might need this property for some future advanced application contracts, so keep this in mind.
The SystemArchitecture property actually tells you the type of the installed package, not the OS architecture, but if you publish all three platform packages for x86, x64 and ARM, it will match the OS architecture.
DeviceManufacturer and DeviceModel might not be defined on custom built PCs. Also on phones the SystemProductName contains the phone name in non-readable format like RM-940_nam_att_200. To convert this name to readable format Lumia 1520 you can use the Phone Name Resolver library.
Here’s a sample of properties gathered on my notebook:
Windows.Desktop 10.0.10240.16413 X64 Info Test 1.1.0.0 ASUSTeK Computer Inc. N53SN
and here on my dev phone:
Windows.Mobile 10.0.10166.0 Arm Info Test 1.1.0.0 NOKIA RM-940_nam_att_200
And that’s all 🙂 If you know any other useful system properties, just let me know.
Usefull for create my view about this..
code for get DeviceNAme
var deviceInfo = new Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation();
var deviceName = deviceInfo.FriendlyName;
Pingback: Get Device Info using C# in Windows Universal App (Windows 10) - c++
Pingback: Application Insights for Universal Windows Platform | TedLindstrom.se
Thanks! / Díky! 😉
Pingback: Detect if runtime is device or desktop (ARM or x86/x64) [SOLVED] – Wanted Solution