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

posted on 2012-02-22 11:15  豆浆咖啡  阅读(3358)  评论(4编辑  收藏  举报