現在的Windows Phone開發實在是太封閉了,很多功能都無法實現,只有三星、LG、戴爾、Nokia這些廠家能利用Native代碼開發應用,目前就HTC開發了手電筒軟件發布到了微軟市場,但是普通開發者利用native代碼就無法提交大市場,當然有很多聰明的開發者不用LED相關的API照樣開發出了手電筒應用,下面來討論幾種常用方法。
一、在應用中創建了一個死循環,無限調用攝像頭的Focus()方法,即自動對焦,而攝像頭處於對焦狀態時LED是亮着的,間接實現了手電筒功能。
優點:能發布到微軟市場.
缺點:對攝像頭損傷大
二、人類的腦子是無比強大的,有人發現在windows phone有一個Microsoft.Phone.Media.Extended.dll,通過他能調用手機的攝像頭,通過錄像讓閃光燈開啟。但是打開vs2010發現根本沒有Microsoft.Phone.Media.Extended這個程序集。順藤摸瓜找到了Den Delimarsky寫的兩篇文章Not your regular photo and video camera on Windows Phone 7和How VideoCamera/PhotoCamera content is saved on Windows Phone 7,前一篇介紹了如何使用PhotoCamera和VideoCamera進行攝像頭圖像實時顯示,后一篇則是介紹怎么取到拍照后的數據,寫得很好,通俗易懂。文章中提到:
通過反射調用攝像頭比較慢而且增加多余的代碼。所以我轉而使用GAC程序集“GAC_Microsoft.Phone.Media.Extended_v7_0_0_0_cneutral_1.dll”,由於是托管代碼,所以就不用加上WMInteropManifest.xml文件(或者<Capability Name=”ID_CAP_INTEROPSERVICES”/>)了。
並且提供了GAC Dump(可以看作Windows Phone未開放API程序集的集合)下載。不過沒有詳細教程,於是搜了一下實現GAC Dump的牛人Thomas Hounsell的Blog,找到了方法 Avoiding Reflection: Adding the InteropServices library to the WP7 SDK。總結起來很簡單:
首先下載Hounsell那篇文章里面的7z文件。
撿自己需要的放到C:\Program Files\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone,記得改名,把前后下划線前的內容都去掉。比如對於原生攝像頭,我們需要Microsoft.Phone.Media.Extended.dll。
打開RedistList文件夾里面的FrameworkList.xml文件,記得用管理員權限。新增一個File標簽(復制之前的就行),程序集名改成你剛剛加入的那個dll的,去掉publicKeyToken屬性。保存。
當然還必須執行sn.exe -Vr [dll path]對DLL進行簽名.這樣就可以使用Microsoft.Phone.Media.Extended.dll了。
此小節大部分內容參考:http://wei.si/blog/2011/03/access-to-native-camera-apis-on-windows-phone-7
優點:對攝像頭損傷小
缺點:原來是可以提交到市場,但是現在微軟發現了,此類調用已經無法提交到市場了。
三、俗話說的好你有張良記,我有過牆梯,其實Microsoft.Phone.Media.Extended.dll在windows phone全局緩存中,可以通過反射來調用此程序集,當然這樣的速度稍微慢點,不過是可以接受的。
優點:可以提交到市場,對攝像頭損傷小
缺點:速度稍微慢點。
好了說了這么多,大家自己研究 研究,有好的方案也不要吝嗇拿出來分享吧。博客地址:http://www.cnblogs.com/cracker