在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下載