在Windows Phone 7中如何获取用户信息和设备信息呢?只需要使用Microsoft.Phone.Info命名空间下的UserExtendedProperties类和DeviceExtendedProperties类对应的成员函数就可以了。具体怎样操作?请看正文。
获取用户信息
使用UserExtendedProperties类的GetValue和TryGetValue方法即可。目前这两个函数的入参,都只支持“ANID”。
GetValue用法如下:
1 string anid = UserExtendedProperties.GetValue("ANID") as string;
2 string anonymousUserId = anid.Substring(2, 32);
TryGetValue用法如下:
view sourceprint?1 object anid = new object();
2 string anonymousUserId = "";
3 if (UserExtendedProperties.TryGetValue("ANID", out anid))
4 {
5 anonymousUserId = anid as string;
6 anonymousUserId = anonymousUserId.Substring(2, 32);
7 }
需要注意的是,如果你的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) 可以用它来观察当前应用程序内存泄漏情况
先来看看获取设备厂商的方法:
1 string strDeviceManufacturer = DeviceExtendedProperties.GetValue("DeviceManufacturer").ToString();
其它的设备信息获取都与设备厂商一样,把GetValue或TryGetValue的参数换一下就可以了。
有一个有点不同,就是DeviceUniqueID。有时候我们就需要保存一个字符串来标识设别的唯一性就好了,用Byte数组有点麻烦,我在这里遍历了该数组,把它转为了一个长度为60的字符串,代码如下:
01 byte[] byteArray = DeviceExtendedProperties.GetValue("DeviceUniqueId") as byte[];
02 string strTemp = "";
03 string strDeviceUniqueID = "";
04 foreach (byte b in byteArray)
05 {
06 strTemp = b.ToString();
07 if (1 == strTemp.Length)
08 {
09 strTemp = "00" + strTemp;
10 }
11 else if (2 == strTemp.Length)
12 {
13 strTemp = "0" + strTemp;
14 }
15 strDeviceUniqueID += strTemp;
16 }
1 我在Demo中的界面只放置了几个获取设备信息的Button和TextBlock,很多都一样,就没有都列出来
1 上图是我在模拟器上运行的结果,无法绑定LiveID,所以用户信息一项取不到,为空。其它都正常。
1 我在真机上测试都可以取到相关信息。:)
1 为了方便大家使用,我把获取用户和设备信息的代码封装到了一个类中,都是Public的静态方法,直接就可以用了。
demo下载