整理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
            }

        }
    }
View Code

设备信息(分辨率,设备类型(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);
        }
    }
View Code

 

posted @ 2016-05-31 15:44 法的空间 阅读(...) 评论(...) 编辑 收藏