最近作了一個很黃很暴力的圖片應用(只是服務端而已,意思是裏面的內容尺度稍微有點大),開發過程還算順暢,用了AOP和三級緩存,心情不錯,因而便想試手Windows Phone開發。開發Windows Phone應用的念頭已經好久了,話說個人幾個手機都是Windows Phone系統的,不過微軟的表現確實不給力。之前也作過一個鈴聲的應用,只是後來由於設計圖不給力就夭折了。html
此次試手也算是Windows Phone開發的開端吧,主要是公司對Windows Phone平臺不太看重,整個公司好幾個團隊,沒有一個給Windows Phone作客戶端的,誰讓市場佔有率小呢,沒辦法的事情。windows
經過Microsoft.Phone.Info命名空間下的DeviceStatus靜態類,咱們能夠很輕鬆的獲取到Windows Phone設備的硬件信息。好比:製造商、系統內存、設備名稱、供電設備、物理鍵盤等信息。緩存
DeviceStatus類型屬性列表 | |
---|---|
屬性名稱 | 說明 |
ApplicationCurrentMemoryUsage | 返回當前應用程序的內存使用狀況(以字節爲單位)。 |
ApplicationMemoryUsageLimit | 返回您的應用程序進程能夠分配的最大內存數量(以字節爲單位)。 |
ApplicationPeakMemoryUsage | 返回當前應用程序的高峯內存使用狀況(以字節爲單位)。 |
DeviceFirmwareVersion | 返回設備上運行的固件版本。 |
DeviceHardwareVersion | 返回設備上運行的硬件版本。 |
DeviceManufacturer | 返回設備製造商名稱。 |
DeviceName | 返回設備名稱。 |
DeviceTotalMemory | 返回設備的物理 RAM 大小(以字節爲單位)。 |
IsKeyboardDeployed | 指示用戶是否已部署設備的物理硬件鍵盤。 |
IsKeyboardPresent | 指示設備是否包含物理硬件鍵盤。 |
PowerSource | 指示設備當前是以電池電源運行仍是插入了外部電源。 |
以上信息可參考MSDN:DeviceStatus 類網絡
除了上面列出的能夠直接取到的信息,有時候還須要獲取屏幕分辨率、處理器數量、是否支持GPS、設備標示等信息。post
獲取屏幕分辨率ui
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
/// <summary>
/// 獲取屏幕分辨率,這樣取到的值可能不許確
/// </summary>
/// <returns></returns>
public
String GetResolutionRatio()
{
String val;
try
{
var content = System.Windows.Application.Current.Host.Content;
val = String.Format(
"{0:0}*{1:0}"
, content.ActualHeight, content.ActualWidth);
}
catch
(Exception)
{
val = String.Empty;
}
return
val;
}
|
獲取處理器數量spa
1
|
System.Environment.ProcessorCount
|
獲取是否支持GPS定位.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
/// <summary>
/// 獲取 是否支持GPS
/// </summary>
/// <returns></returns>
public
Boolean GetSupportGeoCoordinateWatcher()
{
try
{
using
(var geo =
new
GeoCoordinateWatcher())
{
geo.PositionChanged +=
null
;
}
return
true
;
}
catch
(Exception)
{
return
false
;
}
}
|
獲取是否支持FM收音機設計
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
/// <summary>
/// 獲取 是否支持FM收音機
/// </summary>
/// <returns></returns>
public
Boolean GetSupportFmRadio()
{
try
{
return
FMRadio.Instance !=
null
;
}
catch
(Exception)
{
return
false
;
}
}
|
獲取主攝像頭信息(包括分辨率)code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/// <summary>
/// 主攝像頭信息
/// </summary>
/// <returns></returns>
public
String PrimaryCamera()
{
if
(!Camera.IsCameraTypeSupported(CameraType.Primary))
return
ConvertHelper.GetSupportName(
false
);
try
{
var str = ConvertHelper.GetSupportName(
true
);
using
(var camera =
new
PhotoCamera(CameraType.Primary))
{
var size = camera.AvailableResolutions.OrderByDescending(i => i.Height * i.Width).First();
str += String.Format(
" [最大分辨率:{0}x{1}]"
, size.Width, size.Height);
}
return
str;
}
catch
(Exception)
{
return
ConvertHelper.GetSupportName(
true
);
}
}
|
獲取前置像頭信息(包括分辨率)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/// <summary>
/// 前置攝像頭信息
/// </summary>
/// <returns></returns>
public
String FrontFacingCamera()
{
if
(!Camera.IsCameraTypeSupported(CameraType.FrontFacing))
return
ConvertHelper.GetSupportName(
false
);
try
{
var str = ConvertHelper.GetSupportName(
true
);
using
(var camera =
new
PhotoCamera(CameraType.FrontFacing))
{
var size = camera.AvailableResolutions.OrderByDescending(i => i.Height * i.Width).First();
str += String.Format(
" [最大分辨率:{0}x{1}]"
, size.Width, size.Height);
}
return
str;
}
catch
(Exception)
{
return
ConvertHelper.GetSupportName(
true
);
}
}
|
獲取是否支持震動
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
/// <summary>
/// 獲取 是否支持振動器
/// </summary>
/// <returns></returns>
public
Boolean GetSupportVibrateController()
{
try
{
return
VibrateController.Default !=
null
;
}
catch
(Exception)
{
return
false
;
}
}
|
獲取設備標識
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
private
string
GetDeviceUniqueId()
{
var text = String.Empty;
object
obj;
if
(DeviceExtendedProperties.TryGetValue(
"DeviceUniqueId"
,
out
obj))
{
var data = obj
as
byte
[];
if
(data !=
null
)
{
var sb =
new
StringBuilder(data.Length*2);
foreach
(var b
in
data)
{
sb.Append(b.ToString(
"X2"
));
}
text = sb.ToString().Insert(8,
"-"
).Insert(17,
"-"
).Insert(26,
"-"
).Insert(35,
"-"
);
}
}
return
text;
}
|
經過System命名空間下的Environment靜態類,能夠獲取到諸如系統名稱、系統版本、CLR版本等信息。詳細信息可見MSDN:Environment 類。
獲取設備上登錄的Windows Live 帳號的惟一編號
1
2
3
4
5
6
7
8
9
10
|
private
string
GetWindowsLiveAnonymousId()
{
var result =
string
.Empty;
object
obj;
if
(UserExtendedProperties.TryGetValue(
"ANID"
,
out
obj) && obj !=
null
&& obj.ToString().Length >= 34)
{
result = obj.ToString().Substring(2, 32).Insert(8,
"-"
).Insert(13,
"-"
).Insert(18,
"-"
).Insert(23,
"-"
);
}
return
result;
}
|
設備的聯網信息能夠用經過命名空間Microsoft.Phone.Net.NetworkInformation下的DeviceNetworkInformation靜態類獲取到。包括是否使用了WIFI、數據網絡、以及網絡運營商等。
DeviceNetworkInformation類型屬性列表 | |
---|---|
屬性名稱 | 說明 |
CellularMobileOperator | 獲取蜂窩移動運營商的名稱。 |
IsCellularDataEnabled | 獲取一個值,該值指示網絡是否啓用了蜂窩數據。 |
IsCellularDataRoamingEnabled | 獲取一個值,該值指示網絡是否容許數據漫遊。 |
IsNetworkAvailable | 獲取一個值,該值指示網絡是否可用。 |
IsWiFiEnabled | 獲取一個值,該值指示網絡是否啓用了 Wi-Fi。 |
以上信息可參考MSDN : DeviceNetworkInformation 類
爲了方便之後查代碼,我已將項目中的核心代碼粘貼在了上面,此次探索的副產物就是一個名爲MyPhone的應用,和已上線的「個人手機」應用一模一樣。事實上本文的代碼在很大程度上參照了這個程序。不過如今Windows Phone 8的程序不太容易反編譯了,這對於開發者來講是一件好事,可是對於我等菜鳥來講,只能滿世界搜代碼了……
源碼下載:百度網盤