Windows Phone開發經驗談(3)-突破限制開發Windows Phone手電筒(三種方案)


    現在的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 7How 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM