zoukankan      html  css  js  c++  java
  • 使用C#获取Windows Phone手机的各种数据(转)

    最近做了一个很黄很暴力的图片应用(只是服务端而已,意思是里面的内容尺度稍微有点大),开发过程还算顺畅,用了AOP和三级缓存,心情不错,于是便想试手Windows Phone开发。开发Windows Phone应用的念头已经很久了,话说我的几个手机都是Windows Phone系统的,不过微软的表现确实不给力。以前也做过一个铃声的应用,只是后来因为设计图不给力就夭折了。

    这次试手也算是Windows Phone开发的开端吧,主要是公司对Windows Phone平台不太看重,整个公司好几个团队,没有一个给Windows Phone做客户端的,谁让市场占有率小呢,没办法的事情。

    硬件信息

    通过Microsoft.Phone.Info命名空间下的DeviceStatus静态类,我们可以很轻松的获取到Windows Phone设备的硬件信息。比如:制造商、系统内存、设备名称、供电设备、物理键盘等信息。

    DeviceStatus类型属性列表
    属性名称说明
    ApplicationCurrentMemoryUsage 返回当前应用程序的内存使用情况(以字节为单位)。
    ApplicationMemoryUsageLimit 返回您的应用程序进程可以分配的最大内存数量(以字节为单位)。
    ApplicationPeakMemoryUsage 返回当前应用程序的高峰内存使用情况(以字节为单位)。
    DeviceFirmwareVersion 返回设备上运行的固件版本。
    DeviceHardwareVersion 返回设备上运行的硬件版本。
    DeviceManufacturer 返回设备制造商名称。
    DeviceName 返回设备名称。
    DeviceTotalMemory 返回设备的物理 RAM 大小(以字节为单位)。
    IsKeyboardDeployed 指示用户是否已部署设备的物理硬件键盘。
    IsKeyboardPresent 指示设备是否包含物理硬件键盘。
    PowerSource 指示设备当前是以电池电源运行还是插入了外部电源。

    以上信息可参考MSDN:DeviceStatus 类

    除了上面列出的可以直接取到的信息,有时候还需要获取屏幕分辨率、处理器数量、是否支持GPS、设备标示等信息。

    获取屏幕分辨率

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    /// <summary>
    /// 获取屏幕分辨率,这样取到的值可能不准确
    /// </summary>
    /// <returns></returns>
    public String GetResolutionRatio()
    {
        String val;
        try
        {
            var content = System.Windows.Application.Current.Host.Content;
            val = String.Format("{0:0}*{1:0}", content.ActualHeight, content.ActualWidth);
        }
        catch (Exception)
        {
            val = String.Empty;
        }
        return val;
    }

    获取处理器数量

    1
    System.Environment.ProcessorCount

    获取是否支持GPS定位

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    /// <summary>
    /// 获取 是否支持GPS
    /// </summary>
    /// <returns></returns>
    public Boolean GetSupportGeoCoordinateWatcher()
    {
        try
        {
            using (var geo = new GeoCoordinateWatcher())
            {
                geo.PositionChanged += null;
            }
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

    获取是否支持FM收音机

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /// <summary>
    /// 获取 是否支持FM收音机
    /// </summary>
    /// <returns></returns>
    public Boolean GetSupportFmRadio()
    {
        try
        {
            return FMRadio.Instance != null;
        }
        catch (Exception)
        {
            return false;
        }
    }

    获取主摄像头信息(包括分辨率)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    /// <summary>
    /// 主摄像头信息
    /// </summary>
    /// <returns></returns>
    public String PrimaryCamera()
    {
        if (!Camera.IsCameraTypeSupported(CameraType.Primary)) return ConvertHelper.GetSupportName(false);
        try
        {
            var str = ConvertHelper.GetSupportName(true);
            using (var camera = new PhotoCamera(CameraType.Primary))
            {
                var size = camera.AvailableResolutions.OrderByDescending(i => i.Height * i.Width).First();
                str += String.Format(" [最大分辨率:{0}x{1}]", size.Width, size.Height);
            }
            return str;
        }
        catch (Exception)
        {
            return ConvertHelper.GetSupportName(true);
        }
    }

    获取前置像头信息(包括分辨率)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    /// <summary>
    /// 前置摄像头信息
    /// </summary>
    /// <returns></returns>
    public String FrontFacingCamera()
    {
        if (!Camera.IsCameraTypeSupported(CameraType.FrontFacing)) return ConvertHelper.GetSupportName(false);
        try
        {
            var str = ConvertHelper.GetSupportName(true);
            using (var camera = new PhotoCamera(CameraType.FrontFacing))
            {
                var size = camera.AvailableResolutions.OrderByDescending(i => i.Height * i.Width).First();
                str += String.Format(" [最大分辨率:{0}x{1}]", size.Width, size.Height);
            }
            return str;
        }
        catch (Exception)
        {
            return ConvertHelper.GetSupportName(true);
        }
    }

    获取是否支持震动

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /// <summary>
    /// 获取 是否支持振动器
    /// </summary>
    /// <returns></returns>
    public Boolean GetSupportVibrateController()
    {
        try
        {
            return VibrateController.Default != null;
        }
        catch (Exception)
        {
            return false;
        }
    }

    获取设备标识

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    private string GetDeviceUniqueId()
    {
        var text = String.Empty;
        object obj;
        if (DeviceExtendedProperties.TryGetValue("DeviceUniqueId", out obj))
        {
            var data = obj as byte[];
            if (data != null)
            {
                var sb = new StringBuilder(data.Length*2);
                foreach (var b in data)
                {
                    sb.Append(b.ToString("X2"));
                }
                text = sb.ToString().Insert(8, "-").Insert(17, "-").Insert(26, "-").Insert(35, "-");
            }
        }
        return text;
    }

    系统信息

    通过System命名空间下的Environment静态类,可以获取到诸如系统名称、系统版本、CLR版本等信息。详细信息可见MSDN:Environment 类

    获取设备上登陆的Windows Live 账号的唯一编号

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private string GetWindowsLiveAnonymousId()
    {
        var result = string.Empty;
        object obj;
        if (UserExtendedProperties.TryGetValue("ANID", out obj) && obj != null && obj.ToString().Length >= 34)
        {
            result = obj.ToString().Substring(2, 32).Insert(8, "-").Insert(13, "-").Insert(18, "-").Insert(23, "-");
        }
        return result;
    }

    网络信息

    设备的联网信息可以用通过命名空间Microsoft.Phone.Net.NetworkInformation下的DeviceNetworkInformation静态类获取到。包括是否使用了WIFI、数据网络、以及网络运营商等。

    DeviceNetworkInformation类型属性列表
    属性名称说明
    CellularMobileOperator 获取蜂窝移动运营商的名称。
    IsCellularDataEnabled 获取一个值,该值指示网络是否启用了蜂窝数据。
    IsCellularDataRoamingEnabled 获取一个值,该值指示网络是否允许数据漫游。
    IsNetworkAvailable 获取一个值,该值指示网络是否可用。
    IsWiFiEnabled 获取一个值,该值指示网络是否启用了 Wi-Fi。

    以上信息可参考MSDN : DeviceNetworkInformation 类

    开源项目

    为了方便以后查代码,我已将项目中的核心代码粘贴在了上面,这次探索的副产物就是一个名为MyPhone的应用,和已上线的“我的手机”应用如出一辙。事实上本文的代码在很大程度上参照了这个程序。不过现在Windows Phone 8的程序不太容易反编译了,这对于开发者来说是一件好事,但是对于我等菜鸟来说,只能满世界搜代码了……

    源码下载:百度网盘

  • 相关阅读:
    20145209 《信息安全系统设计基础》第5周学习总结
    20145209 《信息安全系统设计基础》第3周学习总结
    20145209 《信息安全系统设计基础》第1周学习总结
    20145209 《信息安全系统设计基础》第0周学习总结
    单调栈&单调队列入门
    GYM 101617 F
    codeforces 13 D
    codeforces 13 b
    G102040I
    19南昌网络赛L
  • 原文地址:https://www.cnblogs.com/moses/p/3491349.html
Copyright © 2011-2022 走看看