在Windows Phone 7中如何獲取用戶信息和設(shè)備信息呢?只需要使用Microsoft.Phone.Info命名空間下的UserExtendedProperties類和DeviceExtendedProperties類對應(yīng)的成員函數(shù)就可以了。具體怎樣操作?請看正文。
獲取用戶信息
使用UserExtendedProperties類的GetValue和TryGetValue方法即可。目前這兩個函數(shù)的入?yún)ⅲ贾恢С帧癆NID”。
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。因此在項目中要注意對返回字符串和對象的非空判斷。
獲取設(shè)備信息
與獲取用戶信息相似,使用DeviceExtendedProperties類的GetValue和TryGetValue方法,這兩個方法的使用方式也與上面相同,不同的是入?yún)ⅰindows Phone 7可以獲取的設(shè)備信息如下:
屬性名稱 值類型 描述 補充說明
DeviceManufacturer
字符串
(最大長度256) 設(shè)備的生產(chǎn)廠商。該字符串沒有標(biāo)準(zhǔn)格式。微軟建議同一個廠商生產(chǎn)的手機使用相同的字符串,但這不是強制的。 注意,該值也可能為空
DeviceName 字符串
(最大長度256) 設(shè)備名稱。該字符串沒有標(biāo)準(zhǔn)格式。 注意,該值也可能為空
DeviceUniqueId
長度為20的byte數(shù)組 設(shè)備的唯一標(biāo)識。該值是唯一不變的,即使系統(tǒng)升級。 注意,不要使用該值來標(biāo)識用戶,因為用戶可能可以更換手機,同一手機也有可能被不同用戶使用
DeviceFirmwareVersion 一個字符串 當(dāng)前設(shè)備運行的固件版本。如果安裝了新版本的固件,該值將會增長。 注意,該值也可能為空
DeviceHardwareVersion
一個字符串 當(dāng)前設(shè)備的硬件版本。 注意,該值也可能為空
DeviceTotalMemory
長整型 設(shè)備物理內(nèi)存的大小(單位是Byte) 該值通常小于實際的RAM大小略小,因此可以用它來判斷RAM是否夠用。
ApplicationCurrentMemoryUsage
長整型 當(dāng)前應(yīng)用程序使用的內(nèi)存(單位是Byte) 可以用它來觀察當(dāng)前應(yīng)用程序消耗內(nèi)存的情況
ApplicationPeakMemoryUsage
長整型 當(dāng)前應(yīng)用程序泄漏的內(nèi)存(單位是Byte) 可以用它來觀察當(dāng)前應(yīng)用程序內(nèi)存泄漏情況
先來看看獲取設(shè)備廠商的方法:
1 string strDeviceManufacturer = DeviceExtendedProperties.GetValue("DeviceManufacturer").ToString();
其它的設(shè)備信息獲取都與設(shè)備廠商一樣,把GetValue或TryGetValue的參數(shù)換一下就可以了。
有一個有點不同,就是DeviceUniqueID。有時候我們就需要保存一個字符串來標(biāo)識設(shè)別的唯一性就好了,用Byte數(shù)組有點麻煩,我在這里遍歷了該數(shù)組,把它轉(zhuǎn)為了一個長度為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中的界面只放置了幾個獲取設(shè)備信息的Button和TextBlock,很多都一樣,就沒有都列出來
1 上圖是我在模擬器上運行的結(jié)果,無法綁定LiveID,所以用戶信息一項取不到,為空。其它都正常。
1 我在真機上測試都可以取到相關(guān)信息。:)
1 為了方便大家使用,我把獲取用戶和設(shè)備信息的代碼封裝到了一個類中,都是Public的靜態(tài)方法,直接就可以用了。
demo下載