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