使用C#获取Windows Phone手机的各种数据(转)
转自:http://www.sum16.com/desinger/use-c-sharp-get-windows-phone-information.html
使用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的程序不太容易反编译了,这对于开发者来说是一件好事,但是对于我等菜鸟来说,只能满世界搜代码了……
源码下载:百度网盘
使用C#获取Windows Phone手机的各种数据(转)的更多相关文章
- 获取 Windows Phone 手机系统信息
wpf: <phone:PhoneApplicationPage x:Class="ABSystemInfo.MainPage" xmlns="http://sch ...
- 通过PowerShell获取Windows系统密码Hash
当你拿到了系统控制权之后如何才能更长的时间内控制已经拿到这台机器呢?作为白帽子,已经在对手防线上撕开一个口子,如果你需要进一步扩大战果,你首先需要做的就是潜伏下来,收集更多的信息便于你判断,便于有更大 ...
- [C语言](二)01 获取Windows图形构件大小信息
SYSMETS.c #include <windows.h> #include "SYSMETS.H"//自定义的单元,所以用"",不是用<& ...
- 获取WINDOWS特殊文件夹
const// registry entries for special paths are kept in : REGSTR_PATH_SPECIAL_FOLDERS = REGSTR_PAT ...
- VC++ 获取windows系统的版本类型
vc中获取windows版本信息,一般是调用GetVersionEx 这个API函数来获取的,这个API需要OSVERSIONINFOEX 这个结构体作为参数,OSVERSIONINFOEX 的对应的 ...
- qt 获取windows 的消息(通过MFC的DLL的透明窗体转发消息)good
qt 给win32 发送消息很简单,但是要获取windows 消息却十分复杂,最后想了一个不是很完美 但是也是以现在本人能力所能实现的唯一途径了,基本原理是 利用vc编写一个mfc 的dll ,这个d ...
- 几个获取Windows系统信息的Delphi程序
1.获取windows版本信息 可以通过Windows API函数GetVersionEx来获得. 具体程序如下: Procedure Tform1.Button1Click(sender:TObje ...
- 获取Windows系统中的所有可用和在用串口
目的:获取Windows系统中的所有可用和在用串口 方法:注册表查询法 优点:简单.实用.快速.无遗漏,无多余结果. 说明:另外还有8种方法可以枚举串口,但都不如此法. 代码和详细注释如下: //-- ...
- Python使用wmi获取Windows相关信息
在使用Python获取Windows系统上的相关的信息可以使用WMI接口来获取, 什么是wmi? WMI是一项核心的Windows管理技术,WMI作为一种规范和基础结构,通过它可以访问.配置.管理和监 ...
随机推荐
- 外网配置花生壳动态域名解析实现外网访问本地iis及vs实时调试
描述:假如已连外网,具备一台路由器的情况下在路由器设置页面配置花生壳动态域名解析,使得外网可以访问到本地iis 托管的web服务,模拟真实环境调试应用程序. 网络运营商ip的动态分配,通常网络提供商给 ...
- RocketMQ专题2:三种常用生产消费方式(顺序、广播、定时)以及顺序消费源码探究
顺序.广播.定时任务 前插 在进行常用的三种消息类型例子展示的时候,我们先来说一说RocketMQ的几个重要概念: PullConsumer与PushConsumer:主要区别在于Pull与Pus ...
- ASP.NET Repeater控件实现简单分页
早上,有看MSDN,看到了 PagedDataSource 类 http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.pa ...
- C# Thread.Abort方法真的让线程停止了吗?
大家都知道在C#里面,我们可以使用 Thread.Start方法来启动一个线程,当我们想停止执行的线程时可以使用Thread.Abort方法来强制停止正在执行的线程,但是请注意,你确定调用了Threa ...
- Wooden Sticks(hdu1501)(sort,dp)
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- 多线程系列(2)线程池ThreadPool
上一篇文章我们总结了多线程最基础的知识点Thread,我们知道了如何开启一个新的异步线程去做一些事情.可是当我们要开启很多线程的时候,如果仍然使用Thread我们需要去管理每一个线程的启动,挂起和终止 ...
- 数据库导入导出expdp,impdp
数据库操作 (1)数据库导入导出expdp,impdp 在导入导出数据库的时候,经常会用到exp和imp,在数据量小的情况下可以随意使用,但是当数据量大,表中数据有百万,千万条的时候,就要等好久好久好 ...
- 悟空模式-java-原型模式
[却说那妖精与大圣斗经半日,不分胜败.行者把棒丢起,叫一声“变!”就以一变十,以十变百,以百变千,半天里,好似蛇游蟒搅,乱打妖邪.妖邪慌了手脚,将身一闪,化道清风,即奔碧空之上逃走.行者念声咒语,将铁 ...
- ElasticSearch 使用小结
写在前面 要做个元数据服务,包括存储和查询.元数据除了一些基本字段外,其他格式是自由的,存储输入为一个JSON形式.比如下面是一个文件对象的元数据: { "name":" ...
- python-解释器模式
源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明: 解释器模式在面向对象语言实现的编译器中得到了广泛的应用.但是此模式进适用于建大的 ...