学习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。

  

  三)国际化与本地化

转载于:https://www.cnblogs.com/Belling/archive/2012/10/31/2748059.html

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

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

    一)准备 看资料说未公开的DLL提供访问照相机的闪光灯的API,利用其功能可以打开闪光灯使闪光灯一直保持打开状态,从而能实现手电筒的功能.商店里已经有很多类似的程序了,不知道微软怎么审核通过的.这个D ...

  2. Jenkins持续集成学习-Windows环境进行.Net开发4

    目录 Jenkins持续集成学习-Windows环境进行.Net开发4 目录 前言 目标 Github持续集成 提交代码到Github 从Github更新代码 git上显示构建状态 自动触发构建 Gi ...

  3. Apache Spark学习:利用Scala语言开发Spark应用程序

    Spark内核是由Scala语言开发的,因此使用Scala语言开发Spark应用程序是自然而然的事情.如果你对Scala语言还不太熟悉,可以阅读网络教程 A Scala Tutorial for Ja ...

  4. ACCP学习旅程之-----使用C#开发数据库应用程序(第二章)

    基本循环语句while.do-while.for循环与Java完全一样        引入的一种新的循环----foreach 1¥ foreach循环 语法: foreach(类型 元素(局部变量) ...

  5. Flex手机开发-退出应用程序

    2019独角兽企业重金招聘Python工程师标准>>> 一行代码 NativeApplication.nativeApplication.exit(); 转载于:https://my ...

  6. 微软开放Windows Phone 7中文开发中心

    Apple的App Store的成功,推动了中国移动互联网的发展,在中国移动应用开发大会时,众多业内知名公司和专家,纷纷表示2011年移动互联网将成为新一轮的焦点.而世界级的移动应用服务商也逐渐将目光 ...

  7. 基于Symbian os 手机开发

    最近开始学习基于Symbian 的手机开发  ,有兴趣的或者有经验的   留个名讨论下嘛  .

  8. 手机开发平台的学习指南、教程和资料总结

    手机客户端软件开发最大的困难就是平台不统一,手机开发平台太多.     手机可分为智能手机开发和feather phone手机.开发平台可分为开放式平台和封闭式平台,开放式平台包括symbian.wi ...

  9. C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法。

    C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法. 原文:C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法. 一般我们在开发Windows Ph ...

最新文章

  1. 如何用 Python 进行基于深度学习的计算机视觉项目开发?
  2. 在失败中学习,MIT新研究显示,机器可以像婴儿一样学会理解人类目标
  3. 1242 Rescue BFS
  4. 成功解决无法连接到YLMF-201404228CG,在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败
  5. Hough直线检测的理解
  6. 对python装饰器几种常见方式的使用与理解
  7. 绝对定位和浮动的区别和运用
  8. linux指令与数据库,Linux指令每日背诵(第一天)
  9. php搜索所有路线,php包含文件路径查找规则
  10. ARMLINUX学习笔记(6)------启动代码分析
  11. 自旋玻璃(spin glass)、自旋冰(spin ice)和量子自旋液体(quantum spin liquid)(之一)
  12. [SQL]数据分析SQL笔试题
  13. 多项式插值与样条插值的解释与示例(matlab)
  14. Linux下的Job Control
  15. 外星人笔记本计算机在哪里,笔记本电脑没声音,详细教您外星人笔记本没声音如何解决...
  16. 2020起重机械指挥模拟考试题库及起重机械指挥实操考试视频
  17. 13-cmake语法-路径设置
  18. Xilinx-7Series-FPGA高速收发器使用学习—TX发送端介绍
  19. mysql按天,按周,按月,按季度,按年统计数据
  20. 进程间通信之管道(匿名管道与命名管道)

热门文章

  1. (EasyX入门与实战)第八章 C++图片连帧制作动画
  2. 做什么算是入行AI?附2018互联网校招高薪清单
  3. 【保姆级教程】2023入门网络安全,从这篇文章开始
  4. HTML5游戏开发进阶指南
  5. mysql分页用乘号出错_PHP分页碰到的问题
  6. 股权转让个人所得税要交多少
  7. 基于linux的qt五子棋小游戏下载,课内资源 - 基于Qt的图形化界面网络在线对战五子棋游戏...
  8. unix高级编程-僵尸进程和孤儿进程
  9. plsql怎么批量添加数据_如何在PLSQL程序中处理批量数据
  10. linux企业版火绒(火绒终端安全管理系统V2.0)安装