在Windows Phone 7中如何擷取使用者資訊和裝置資訊呢?只需要使用Microsoft.Phone.Info命名空間下的UserExtendedProperties類和DeviceExtendedProperties類對應的成員函數就可以了。具體怎樣操作?請看本文。
擷取使用者資訊
使用UserExtendedProperties類的GetValue和TryGetValue方法即可。目前這兩個函數的入參,都只支援“ANID”。
GetValue用法如下:
string anid = UserExtendedProperties.GetValue("ANID") as string;string anonymousUserId = anid.Substring(2, 32);
TryGetValue用法如下:
object anid = new object(); string anonymousUserId = ""; if (UserExtendedProperties.TryGetValue("ANID", out anid)) { anonymousUserId = anid as string; anonymousUserId = anonymousUserId.Substring(2, 32); }
需要注意的是,如果你的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) |
可以用它來觀察當前應用程式記憶體最大使用的情況 |
先來看看擷取裝置廠商的方法:
string strDeviceManufacturer = DeviceExtendedProperties.GetValue("DeviceManufacturer").ToString();
其它的裝置資訊擷取都與裝置廠商一樣,把GetValue或TryGetValue的參數換一下就可以了。
有一個有點不同,就是DeviceUniqueID。有時候我們就需要儲存一個字串來標識設別的唯一性就好了,用Byte數組有點麻煩,我在這裡遍曆了該數組,把它轉為了一個長度為60的字串,代碼如下:
byte[] byteArray = DeviceExtendedProperties.GetValue("DeviceUniqueId") as byte[]; string strTemp = ""; string strDeviceUniqueID = ""; foreach (byte b in byteArray) { strTemp = b.ToString(); if (1 == strTemp.Length) { strTemp = "00" + strTemp; } else if (2 == strTemp.Length) { strTemp = "0" + strTemp; } strDeviceUniqueID += strTemp; }
我在Demo中的介面只放置了幾個擷取裝置資訊的Button和TextBlock,很多都一樣,就沒有都列出來,截個圖供大家參考吧:
是我在模擬器上啟動並執行結果,無法綁定LiveID,所以使用者資訊一項取不到,為空白。其它都正常。
我在真機上測試都可以取到相關資訊。:)
為了方便大家使用,我把擷取使用者和裝置資訊的代碼封裝到了一個類中,都是Public的靜態方法,直接就可以用了。
下載Demo
如果發現什麼問題,請各位及時通知我,謝謝。