引言
目前,對于我們國內(nèi)大多數(shù)的Windows Phone 7開發(fā)者來說,,模擬器是調(diào)試程序的唯一選擇,。因此,和硬件相關的一些功能就沒有辦法進行測試,。加速度傳感器是Windows Phone 7中一個基本的傳感器,,很多應用軟件和游戲軟件都需要用到它,因此,,使用其他手段來模擬重力加速度傳感器是一個十分有用的嘗試,。
線索
在今年8月,Windows Phone 7開發(fā)工具還是Beta版本的時候,,山羊胡大叔的Blog《給你的Windows Phone 7模擬器加入GPS和加速度傳感器模擬功能》中,,已經(jīng)給出了一種途徑,其方法是:使用一臺真實的HD2來獲取加速度傳感器的數(shù)據(jù),,然后把這些數(shù)據(jù)再傳回WCF服務,;同時Windows Phone 7的應用程序通過這個WCF服務來獲取加速度傳感器的值。由于手頭沒有HD2設備,,所以就無法去嘗試和驗證這個方法,。
兩個月之后,距離Windows Phone 7正式版本的開發(fā)工具發(fā)布后不久,,Charles Petzold給出了他的電子書《Programming Windows Phone 7》,,提供廣大開發(fā)者們免費下載。他在前言中就提到了如何在Windows Phone 7模擬器中實現(xiàn)加速度傳感器的方法,。本文根據(jù)Charles Petzold給出的提示信息進行了驗證,,試想一下,用一個攝像頭就可以模擬加速度傳感器,,真是挺有趣的,。
準備工作
1. 安裝Windows Phone 7的開發(fā)工具,這個我就不再啰嗦了,。
2. 網(wǎng)絡攝像頭一個,,普通的就可以。
3. 去Codeplex網(wǎng)站下載開源項目AccelKit,,網(wǎng)址為:http://accelkit.codeplex.com/,。
4. 解壓AccelKit以后,,里面包括EmuClasses、Executable,、src這三個文件夾和Print_This_Cutout這個pdf文件,。EmuClasses文件夾中的文件可以引入到我們的應用程序中,實現(xiàn)加速度傳感器數(shù)值的讀??;Executable文件夾中的文件用來運行在桌面PC上,控制攝像頭,,并保存數(shù)據(jù),;src中的文件是對應的控制攝像頭程序的源程序。
5. 將Print_This_Cutout.pdf文件打印,,并用剪刀剪裁其中一個Windows Phone 7的面板,,將其固定于一塊板子上。
開始測試
1. 啟動Executable文件夾中的accelKit.exe文件,,開啟攝像頭,。
2. 開啟Windows Phone 7模擬器,運行帶有加速度傳感器的應用程序,。
3. 在攝像頭前晃動帶有Windows Phone 7面板的板子,,檢驗效果。
引言
目前,,對于我們國內(nèi)大多數(shù)的Windows Phone 7開發(fā)者來說,模擬器是調(diào)試程序的唯一選擇,。因此,,和硬件相關的一些功能就沒有辦法進行測試。加速度傳感器是Windows Phone 7中一個基本的傳感器,,很多應用軟件和游戲軟件都需要用到它,,因此,使用其他手段來模擬重力加速度傳感器是一個十分有用的嘗試,。
線索
在今年8月,,Windows Phone 7開發(fā)工具還是Beta版本的時候,山羊胡大叔的Blog《給你的Windows Phone 7模擬器加入GPS和加速度傳感器模擬功能》中,,已經(jīng)給出了一種途徑,,其方法是:使用一臺真實的HD2來獲取加速度傳感器的數(shù)據(jù),然后把這些數(shù)據(jù)再傳回WCF服務,;同時Windows Phone 7的應用程序通過這個WCF服務來獲取加速度傳感器的值,。由于手頭沒有HD2設備,所以就無法去嘗試和驗證這個方法,。
兩個月之后,,距離Windows Phone 7正式版本的開發(fā)工具發(fā)布后不久,,Charles Petzold給出了他的電子書《Programming Windows Phone 7》,提供廣大開發(fā)者們免費下載,。他在前言中就提到了如何在Windows Phone 7模擬器中實現(xiàn)加速度傳感器的方法,。本文根據(jù)Charles Petzold給出的提示信息進行了驗證,試想一下,,用一個攝像頭就可以模擬加速度傳感器,,真是挺有趣的。
準備工作
1. 安裝Windows Phone 7的開發(fā)工具,,這個我就不再啰嗦了,。
2. 網(wǎng)絡攝像頭一個,普通的就可以,。
3. 去Codeplex網(wǎng)站下載開源項目AccelKit,,網(wǎng)址為:http://accelkit.codeplex.com/。
4. 解壓AccelKit以后,,里面包括EmuClasses,、Executable、src這三個文件夾和Print_This_Cutout這個pdf文件,。EmuClasses文件夾中的文件可以引入到我們的應用程序中,,實現(xiàn)加速度傳感器數(shù)值的讀取,;Executable文件夾中的文件用來運行在桌面PC上,,控制攝像頭,并保存數(shù)據(jù),;src中的文件是對應的控制攝像頭程序的源程序,。
5. 將Print_This_Cutout.pdf文件打印,并用剪刀剪裁其中一個Windows Phone 7的面板,,將其固定于一塊板子上,。
開始測試
1. 啟動Executable文件夾中的accelKit.exe文件,開啟攝像頭,。
2. 開啟Windows Phone 7模擬器,,運行帶有加速度傳感器的應用程序。
3. 在攝像頭前晃動帶有Windows Phone 7面板的板子,,檢驗效果,。
實現(xiàn)原理
攝像頭對捕捉到的圖像進行分析,識別Windows Phone 7面板的移動加速度,,按照一定的時間間隔發(fā)送給本地的端口:http://127.0.0.1:88/,。
我們在寫Windows Phone 7的應用程序時,利用WebClient來獲取88端口的數(shù)據(jù):
,。.
WebClient wc;
wc = new WebClient();
wc.AllowReadStreamBuffering = false;
wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
wc.DownloadStringAsync(new Uri(http://127.0.0.1:88/));
,。.
void wc_DownloadStringCompleted(object sender,, DownloadStringCompletedEventArgs e)
{
if (e.Error != null) { timer.Begin(); return; }
if (e.Result == null) { timer.Begin(); return; }
string[] vc = e.Result.Split(new Char[] {‘,,’,, ‘ ’});
double x = Convert.ToDouble(vc[0]);
double y = Convert.ToDouble(vc[1]);
double z = Convert.ToDouble(vc[2]);
}
具體可以參考EmuClasses文件中的文件。
注意
1. 目前該方法只實現(xiàn)了重力加速度,,沒有實現(xiàn)運動方向的加速度,,即給出的X/Y/Z這三個值是在垂直方向上的加速度。
2. PC機上運行的攝像頭程序會比較耗費CPU資源,,建議分辨率不用調(diào)太高,,可以識別就行。