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