整理UWP中网络和设备信息获取的帮助类,需要的拿走。
网络(运营商信息,网络类型)
public static class NetworkInfo { /// <summary> /// 网络是否可用 /// </summary> public static bool IsNetworkAvailable { get { ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile(); return (profile?.GetNetworkConnectivityLevel() == NetworkConnectivityLevel.InternetAccess); } } /// <summary> /// 获取IP地址 /// </summary> /// <returns>IP地址</returns> public static string GetIpAddress() { Guid? networkAdapterId = NetworkInformation.GetInternetConnectionProfile()?.NetworkAdapter?.NetworkAdapterId; return (networkAdapterId.HasValue ? NetworkInformation.GetHostNames().FirstOrDefault(hn => hn?.IPInformation?.NetworkAdapter.NetworkAdapterId == networkAdapterId)?.CanonicalName : null); } /// <summary> /// 获取网络运营商信息 /// </summary> /// <returns></returns> public static string GetNetworkName() { try { ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile(); if (profile != null) { if (profile.IsWwanConnectionProfile) { var homeProviderId = profile.WwanConnectionProfileDetails.HomeProviderId; //4600是我手机测试出来的。 if (homeProviderId == "46000" || homeProviderId == "46002" || homeProviderId == "4600") { return "中国移动"; } //已验证 else if (homeProviderId == "46001") { return "中国联通"; } //貌似还没win10 电信手机。。待验证 else if (homeProviderId == "46003") { return "中国电信"; } } else { return "其他"; } //也可以用下面的方法,已验证移动和联通 //var name = profile.GetNetworkNames().FirstOrDefault(); //if (name != null) //{ // name = name.ToUpper(); // if (name == "CMCC") // { // return "中国移动"; // } // else if (name == "UNICOM") // { // return "中国联通"; // } // else if (name == "TELECOM") // { // return "中国电信"; // } //} //return "其他"; } return "其他"; } catch (Exception) { return "其他"; } } /// <summary> /// 获取网络连接类型 /// </summary> /// <returns></returns> public static string GetNetWorkType() { try { ConnectionProfile profile = NetworkInformation.GetInternetConnectionProfile(); if (profile == null) { return "未知"; } if (profile.IsWwanConnectionProfile) { WwanDataClass connectionClass = profile.WwanConnectionProfileDetails.GetCurrentDataClass(); switch (connectionClass) { //2G-equivalent case WwanDataClass.Edge: case WwanDataClass.Gprs: return "2G"; //3G-equivalent case WwanDataClass.Cdma1xEvdo: case WwanDataClass.Cdma1xEvdoRevA: case WwanDataClass.Cdma1xEvdoRevB: case WwanDataClass.Cdma1xEvdv: case WwanDataClass.Cdma1xRtt: case WwanDataClass.Cdma3xRtt: case WwanDataClass.CdmaUmb: case WwanDataClass.Umts: case WwanDataClass.Hsdpa: case WwanDataClass.Hsupa: return "3G"; //4G-equivalent case WwanDataClass.LteAdvanced: return "4G"; //not connected case WwanDataClass.None: return "未连接"; //unknown case WwanDataClass.Custom: default: return "未知"; } } else if (profile.IsWlanConnectionProfile) { return "WIFI"; } return "未知"; } catch (Exception) { return "未知"; //as default } } }
设备信息(分辨率,设备类型(PC,平板,手机,Xbox))
/// <summary> /// 设备信息 /// </summary> public static class DeviceInfo { /// <summary> /// 设备ID /// </summary> public static readonly string DeviceId; /// <summary> /// 用户代理 /// </summary> public static readonly string UserAgent; /// <summary> /// 操作系统版本 /// </summary> public static readonly string OsVersion; /// <summary> /// 设备分辨率 /// </summary> public static readonly Size DeviceResolution; /// <summary> /// 设备时区名字 /// </summary> public static readonly string Timezone; /// <summary> /// 设备语言 /// </summary> public static readonly string Language; /// <summary> /// 设备类型 /// </summary> public static readonly string DeviceType; static DeviceInfo() { DeviceId = GetDeviceId(); UserAgent = GetUserAgent(); OsVersion = GetOsVersion(); DeviceResolution = GetDeviceResolution(); Timezone = GetTimezone(); Language = GetLanguage(); DeviceType = GetDeviceType(); } private static string GetDeviceType() { var deviceFamily = AnalyticsInfo.VersionInfo.DeviceFamily; if (deviceFamily == "Windows.Desktop") { if (UIViewSettings.GetForCurrentView().UserInteractionMode == UserInteractionMode.Mouse) { return "WINDESKTOP"; } else { return "WINPAD"; } } else if (deviceFamily == "Windows.Mobile") { return "WINPHONE"; } else if (deviceFamily == "Windows.Xbox") { return "XBOX"; } else if (deviceFamily == "Windows.IoT") { return "IOT"; } else { return deviceFamily.ToUpper(); } } /// <summary> /// 获取设备语言 /// </summary> /// <returns>设备语言</returns> private static string GetLanguage() { var Languages = Windows.System.UserProfile.GlobalizationPreferences.Languages; if (Languages.Count > 0) { return Languages[0]; } return Windows.Globalization.Language.CurrentInputMethodLanguageTag; } /// <summary> /// 获取设备时区名字 /// </summary> /// <returns>设备时区名字</returns> private static string GetTimezone() { return TimeZoneInfo.Local.DisplayName; } /// <summary> /// 获取设备分辨率 /// </summary> /// <returns>设备分辨率</returns> private static Size GetDeviceResolution() { Size resolution = Size.Empty; var rawPixelsPerViewPixel = DisplayInformation.GetForCurrentView().RawPixelsPerViewPixel; foreach (var item in PointerDevice.GetPointerDevices()) { resolution.Width = item.ScreenRect.Width * rawPixelsPerViewPixel; resolution.Height = item.ScreenRect.Height * rawPixelsPerViewPixel; break; } return resolution; } /// <summary> /// 获取设备ID /// </summary> /// <returns>设备ID</returns> private static string GetDeviceId() { HardwareToken token = HardwareIdentification.GetPackageSpecificToken(null); return CryptographyHelper.Md5Encrypt(token.Id); } /// <summary> /// 获取用户代理 /// </summary> /// <returns>用户代理</returns> private static string GetUserAgent() { var Info = new EasClientDeviceInformation(); return $"{Info.SystemManufacturer} {Info.SystemProductName}"; } /// <summary> /// 获取操作系统版本 /// </summary> /// <returns>操作系统版本</returns> private static string GetOsVersion() { ulong version = Convert.ToUInt64(AnalyticsInfo.VersionInfo.DeviceFamilyVersion); return $"{version >> 48 & 0xFFFF}.{version >> 32 & 0xFFFF}.{version >> 16 & 0xFFFF}.{version & 0xFFFF}"; } } /// <summary> /// 加密帮助类 /// </summary> public static class CryptographyHelper { public static string DesEncrypt(string key, string plaintext) { SymmetricKeyAlgorithmProvider des = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.DesEcbPkcs7); IBuffer keyMaterial = CryptographicBuffer.ConvertStringToBinary(key, BinaryStringEncoding.Utf8); CryptographicKey symmetricKey = des.CreateSymmetricKey(keyMaterial); IBuffer plainBuffer = CryptographicBuffer.ConvertStringToBinary(plaintext, BinaryStringEncoding.Utf8); IBuffer cipherBuffer = CryptographicEngine.Encrypt(symmetricKey, plainBuffer, null); return CryptographicBuffer.EncodeToHexString(cipherBuffer); } public static string TripleDesDecrypt(string key, string ciphertext) { SymmetricKeyAlgorithmProvider tripleDes = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.TripleDesEcb); IBuffer keyMaterial = CryptographicBuffer.ConvertStringToBinary(key, BinaryStringEncoding.Utf8); CryptographicKey symmetricKey = tripleDes.CreateSymmetricKey(keyMaterial); IBuffer cipherBuffer = CryptographicBuffer.DecodeFromHexString(ciphertext); IBuffer plainBuffer = CryptographicEngine.Decrypt(symmetricKey, cipherBuffer, null); return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, plainBuffer); } public static string Md5Encrypt(string value) { IBuffer data = CryptographicBuffer.ConvertStringToBinary(value, BinaryStringEncoding.Utf8); return Md5Encrypt(data); } public static string Md5Encrypt(IBuffer data) { HashAlgorithmProvider md5 = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Md5); IBuffer hashedData = md5.HashData(data); return CryptographicBuffer.EncodeToHexString(hashedData); } public static string EncodeToBase64String(string value) { IBuffer buffer = CryptographicBuffer.ConvertStringToBinary(value, BinaryStringEncoding.Utf8); return CryptographicBuffer.EncodeToBase64String(buffer); } public static string DecodeFromBase64String(string value) { IBuffer buffer = CryptographicBuffer.DecodeFromBase64String(value); return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, buffer); } }