Windows Phone 7获取用户信息和设备信息
在Windows Phone 7中如何获取用户信息和设备信息呢?只需要使用Microsoft.Phone.Info命名空间下的UserExtendedProperties类和DeviceExtendedProperties类对应的成员函数就可以了。具体怎样操作?请看正文。
获取用户信息
使用UserExtendedProperties类的GetValue和TryGetValue方法即可。目前这两个函数的入参,都只支持“ANID”。
GetValue用法如下:
string anid = UserExtendedProperties.GetValue("ANID") as string; string anonymousUserId = anid.Substring(2, 32);
TryGetValue用法如下:
object anid = new object(); string anonymousUserId = ""; if (UserExtendedProperties.TryGetValue("ANID", out anid)) { anonymousUserId = anid as string; anonymousUserId = anonymousUserId.Substring(2, 32); }
需要注意的是,如果你的WP7手机没有绑定Live ID,GetValue返回的字符串为null,TryGetValue返回的对象也为null。因此在项目中要注意对返回字符串和对象的非空判断。
获取设备信息
与获取用户信息相似,使用DeviceExtendedProperties类的GetValue和TryGetValue方法,这两个方法的使用方式也与上面相同,不同的是入参。Windows Phone 7可以获取的设备信息如下:
属性名称 | 值类型 | 描述 | 补充说明 |
DeviceManufacturer |
字符串 (最大长度256) |
设备的生产厂商。该字符串没有标准格式。微软建议同一个厂商生产的手机使用相同的字符串,但这不是强制的。 | 注意,该值也可能为空 |
DeviceName | 字符串 (最大长度256) |
设备名称。该字符串没有标准格式。 | 注意,该值也可能为空 |
DeviceUniqueId |
长度为20的byte数组 | 设备的唯一标识。该值是唯一不变的,即使系统升级。 | 注意,不要使用该值来标识用户,因为用户可能可以更换手机,同一手机也有可能被不同用户使用 |
DeviceFirmwareVersion | 一个字符串 | 当前设备运行的固件版本。如果安装了新版本的固件,该值将会增长。 | 注意,该值也可能为空 |
DeviceHardwareVersion |
一个字符串 | 当前设备的硬件版本。 | 注意,该值也可能为空 |
DeviceTotalMemory |
长整型 | 设备物理内存的大小(单位是Byte) | 该值通常小于实际的RAM大小略小,因此可以用它来判断RAM是否够用。 |
ApplicationCurrentMemoryUsage |
长整型 | 当前应用程序使用的内存(单位是Byte) | 可以用它来观察当前应用程序消耗内存的情况 |
ApplicationPeakMemoryUsage |
长整型 | 当前应用程序泄漏的内存(单位是Byte) | 可以用它来观察当前应用程序内存泄漏情况 |
先来看看获取设备厂商的方法:
string strDeviceManufacturer = DeviceExtendedProperties.GetValue("DeviceManufacturer").ToString();
其它的设备信息获取都与设备厂商一样,把GetValue或TryGetValue的参数换一下就可以了。
有一个有点不同,就是DeviceUniqueID。有时候我们就需要保存一个字符串来标识设别的唯一性就好了,用Byte数组有点麻烦,我在这里遍历了该数组,把它转为了一个长度为60的字符串,代码如下:
byte[] byteArray = DeviceExtendedProperties.GetValue("DeviceUniqueId") as byte[]; string strTemp = ""; string strDeviceUniqueID = ""; foreach (byte b in byteArray) { strTemp = b.ToString(); if (1 == strTemp.Length) { strTemp = "00" + strTemp; } else if (2 == strTemp.Length) { strTemp = "0" + strTemp; } strDeviceUniqueID += strTemp; }
我在Demo中的界面只放置了几个获取设备信息的Button和TextBlock,很多都一样,就没有都列出来,截个图供大家参考吧:
上图是我在模拟器上运行的结果,无法绑定LiveID,所以用户信息一项取不到,为空。其它都正常。
我在真机上测试都可以取到相关信息。:)
为了方便大家使用,我把获取用户和设备信息的代码封装到了一个类中,都是Public的静态方法,直接就可以用了。
如果发现什么问题,请各位及时通知我,谢谢。