学习Windows Phone 7手机开发:迷你手电筒程序

学习Windows Phone 7手机开发:迷你手电筒程序

时间:2011-10-08 23:24来源:博客园 作者:虫子CCC 点击:829次
一)准备 看资料说未公开的DLL提供访问照相机的闪光灯的API,利用其功能可以打开闪光灯使闪光灯一直保持打开状态,从而能实现手电筒的功能。商店里已经有很多类似的程序了,不知道微软怎么审核通过的。这个DLL就是Microsoft.Phone.Media.Extended.dll,该DLL文件的具体下载地址在后面的下载列表中。(该文件可以从模拟器的BI
  

  一)准备

  看资料说未公开的DLL提供访问照相机的闪光灯的API,利用其功能可以打开闪光灯使闪光灯一直保持打开状态,从而能实现手电筒的功能。商店里已经有很多类似的程序了,不知道微软怎么审核通过的。这个DLL就是Microsoft.Phone.Media.Extended.dll,该DLL文件的具体下载地址在后面的下载列表中。(该文件可以从模拟器的BIN文件中提取,这方面不懂,所以就直接拿来用了。)

  1)Reference Assemblies

  下载得到的文件是GAC_Microsoft.Phone.Media.Extended_v7_0_0_0_cneutral_1.dll,更名为Microsoft.Phone.Media.Extended.dll,然后复制拷贝到系统的程序集引用文件夹中,具体目录是:C:\Program Files\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71。

  2)强名称

  使用VS的sn.exe工具,对DLL文件进行强名称验证,打开MSDOS命令行窗口或VS的命令行提示窗口,输入命令(复制粘贴即可)。注意运行命令行窗口时必须选择以“管理员身份运行”的模式(鼠标右键菜单中有)。

  sn -Vr "C:\Program Files\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\Microsoft.Phone.Media.Extended.dll"

  3)自动引用

  在目录C:\Program Files\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\RedistList下面,有一个文件FrameworkList.xml,将DLL文件添加进去,即可实现在VS中添加引用是自动出现引用列表中。

  打开这个XML文件,照猫画虎添加下面的内容即可。

<File AssemblyName="Microsoft.Phone.Media.Extended" Version="7.0.0.0" PublicKeyToken="24eec0d8c86cda1e" 
Culture=
"neutral" ProcessorArchitecture="MSIL" InGac="false" />

  注意:添加引用时,VS会报告有风险,可以不理会。由于该DLL文件是属于系统全局缓存中的,手机的ROM中已经包含在内,所以不用将其加入工程,只是引用即可。

  二)程序设计

  1)应用按钮条ApplicationBar

  在App.xaml中的Application.Resources标签中定义共用的应用按钮条的资源,然后每个页面进行绑定,以达到程序界面统一。注意:按钮的Text属性必须设置,不能留空或不定义。

  资源定义:

<Application.Resources>
<shell:ApplicationBar x:Name="GlobalAppBar" IsVisible="True" IsMenuEnabled="True" Opacity="0">
<shell:ApplicationBarIconButton x:Name="btnLEDLightPage" IconUri="/Images/AppBarBtn_LEDLight_Light.png" Text="LED" Click="btnLEDLightPage_Click"/>
<shell:ApplicationBarIconButton x:Name="btnScreenLightPage" IconUri="/Images/AppBarBtn_ScreenLight_Light.png" Text="Screen" Click="btnScreenLightPage_Click"/>
<shell:ApplicationBarIconButton x:Name="btnSwitch" IconUri="/Images/AppBarBtn_Switch_Off_Light.png" Text="ON"/>
<shell:ApplicationBarIconButton x:Name="btnHelp" IconUri="/Images/AppBarBtn_Help_Light.png" Text="Help"/>
</shell:ApplicationBar>
</Application.Resources>

  绑定:在页面的根标签PhoneApplicationPage中添加 ApplicationBar="{StaticResource GlobalAppBar}" 即可。

  闪光灯按钮:从屏幕页面切换到闪光灯页面。

  屏幕按钮:从闪光灯页面切换到屏幕页面。

  开关按钮:开关。

  帮助按钮:显示帮助。

  事件定义:闪光灯按钮、屏幕按钮的操作是固定的,所以可以在App.xaml.cs中编写代码统一定义,开关按钮、帮助按钮则分别在不同的页面中定义。

  事件加载:因为按钮是共用的,所以每个页面在载入、载出时要对开关按钮、帮助按钮的事件分别进行加载和卸载操作,也就是说在各自页面的OnNavigatedTo事件中加载按钮事件,而在OnNavigatedFrom事件中卸载按钮事件。

  按钮图片:根据系统的主题色(深色或浅色),自动设置相应的图片给按钮使用,需要在各自的页面中进行设置。

  2)闪光灯页面(主页面)

  a)VideoCamera对象

  添加的Microsoft.Phone的引用,在页面加载时对VideoCamera对象进行初始化,卸载页面时则及时释放。在VideoCamera的Initialized事件中设置LampEnabled=true,以便能使用闪光灯,该事件中如果要访问主页面UI的控件,则必须线程同步。同时,需要一个CameraVisualizer对象来配合VideoCamera作为其视频输出,否则VideoCamera不能正常工作,在主线程中创建CameraVisualizer并最后调用其SetCource方法将VideoCamera对象传入即可。

  b)屏幕背景

  闪光灯打开时,显示手电筒照亮的图片,闪光灯关闭时,则显示手电筒熄灭的图片。同时,轻拍手电的灯泡时也能打开或关闭闪光灯,与开关按钮保持同步。屏幕背景的显示是将相应图片填入Grid的Background属性,这样一来,页面实际就是一个空的Grid。

  c)页面状态

  利用PhoneApplicationService.Current.State来保存状态,在OnNavigatedTo事件中取出状态,在OnNavigatedFrom事件中保存状态。

  d)拦截回退

  程序的主页面中覆写OnBackKeyPress事件,以便能够提示用户确认退出,通过设置事件参数CancelEventArgs的Cancel=true即可。

  e)灯泡Tap

  在Grid中恰当位置,放置一个没有边界、没有内容、透明的Button来处理,如:BorderBrush="{x:Null}" BorderThickness="0" Opacity="0"

  注意:

  *主页面默认的名称是MainPage,最好不要试图修改这个名称,以免产生一些莫名其妙的麻烦。

  *开发调试时,不要随意修改WMAppManifest.xml文件中的Capabilities标签中的内容,以免在编译调试时出现dll产生异常之类的错误。正式发布时,再根据实际情况去除不必要的设备需求项目(Capability标签)。

  *不要修改SplashScreenImage.jpg文件,即不要修改文件的名称、后缀、位置、Build Action(必须为Content),除非你自己来实现程序启动时所显示的闪现界面(或者不要)。

  3)屏幕页面

  a)屏幕背景色

  闪光灯打开时,屏幕背景色设置显示为白色;闪光灯关闭时,则是黑色。页面实际是一个空的Grid,直接设置Grid的Background为白色或黑色。

  b)页面状态

  利用PhoneApplicationService.Current.State来保存状态,在OnNavigatedTo事件中取出状态,在OnNavigatedFrom事件中保存状态。

  4)帮助界面

  1)使用Border

  Border的好处就是,它是带有一个Visibility属性的容器,且不受Grid、StackPanel的布局限制。

  暂时没有找到更好的办法,只好在每个页面中放置相同内容的一个Border。Border的Content内容就是标题、关闭按钮、帮助内容、作者、时间等信息。

  2)关闭Tap

  应用按钮条ApplicationBar上的帮助按钮打开显示帮助界面Border,轻拍Border上的关闭按钮则隐藏帮助界面Border。

  

 

  三)国际化与本地化

posted @ 2012-10-31 15:10  BellingWP  阅读(267)  评论(0编辑  收藏  举报