学习Windows Phone 7手机开发:迷你手电筒程序
学习Windows Phone 7手机开发:迷你手电筒程序
一)准备
看资料说未公开的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文件,照猫画虎添加下面的内容即可。
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手机开发:迷你手电筒程序相关推荐
- 学习Windows Phone手机开发:迷你手电筒程序
一)准备 看资料说未公开的DLL提供访问照相机的闪光灯的API,利用其功能可以打开闪光灯使闪光灯一直保持打开状态,从而能实现手电筒的功能.商店里已经有很多类似的程序了,不知道微软怎么审核通过的.这个D ...
- Jenkins持续集成学习-Windows环境进行.Net开发4
目录 Jenkins持续集成学习-Windows环境进行.Net开发4 目录 前言 目标 Github持续集成 提交代码到Github 从Github更新代码 git上显示构建状态 自动触发构建 Gi ...
- Apache Spark学习:利用Scala语言开发Spark应用程序
Spark内核是由Scala语言开发的,因此使用Scala语言开发Spark应用程序是自然而然的事情.如果你对Scala语言还不太熟悉,可以阅读网络教程 A Scala Tutorial for Ja ...
- ACCP学习旅程之-----使用C#开发数据库应用程序(第二章)
基本循环语句while.do-while.for循环与Java完全一样 引入的一种新的循环----foreach 1¥ foreach循环 语法: foreach(类型 元素(局部变量) ...
- Flex手机开发-退出应用程序
2019独角兽企业重金招聘Python工程师标准>>> 一行代码 NativeApplication.nativeApplication.exit(); 转载于:https://my ...
- 微软开放Windows Phone 7中文开发中心
Apple的App Store的成功,推动了中国移动互联网的发展,在中国移动应用开发大会时,众多业内知名公司和专家,纷纷表示2011年移动互联网将成为新一轮的焦点.而世界级的移动应用服务商也逐渐将目光 ...
- 基于Symbian os 手机开发
最近开始学习基于Symbian 的手机开发 ,有兴趣的或者有经验的 留个名讨论下嘛 .
- 手机开发平台的学习指南、教程和资料总结
手机客户端软件开发最大的困难就是平台不统一,手机开发平台太多. 手机可分为智能手机开发和feather phone手机.开发平台可分为开放式平台和封闭式平台,开放式平台包括symbian.wi ...
- C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法。
C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法. 原文:C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法. 一般我们在开发Windows Ph ...
最新文章
- 如何用 Python 进行基于深度学习的计算机视觉项目开发?
- 在失败中学习,MIT新研究显示,机器可以像婴儿一样学会理解人类目标
- 1242 Rescue BFS
- 成功解决无法连接到YLMF-201404228CG,在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败
- Hough直线检测的理解
- 对python装饰器几种常见方式的使用与理解
- 绝对定位和浮动的区别和运用
- linux指令与数据库,Linux指令每日背诵(第一天)
- php搜索所有路线,php包含文件路径查找规则
- ARMLINUX学习笔记(6)------启动代码分析
- 自旋玻璃(spin glass)、自旋冰(spin ice)和量子自旋液体(quantum spin liquid)(之一)
- [SQL]数据分析SQL笔试题
- 多项式插值与样条插值的解释与示例(matlab)
- Linux下的Job Control
- 外星人笔记本计算机在哪里,笔记本电脑没声音,详细教您外星人笔记本没声音如何解决...
- 2020起重机械指挥模拟考试题库及起重机械指挥实操考试视频
- 13-cmake语法-路径设置
- Xilinx-7Series-FPGA高速收发器使用学习—TX发送端介绍
- mysql按天,按周,按月,按季度,按年统计数据
- 进程间通信之管道(匿名管道与命名管道)
热门文章
- (EasyX入门与实战)第八章 C++图片连帧制作动画
- 做什么算是入行AI?附2018互联网校招高薪清单
- 【保姆级教程】2023入门网络安全,从这篇文章开始
- HTML5游戏开发进阶指南
- mysql分页用乘号出错_PHP分页碰到的问题
- 股权转让个人所得税要交多少
- 基于linux的qt五子棋小游戏下载,课内资源 - 基于Qt的图形化界面网络在线对战五子棋游戏...
- unix高级编程-僵尸进程和孤儿进程
- plsql怎么批量添加数据_如何在PLSQL程序中处理批量数据
- linux企业版火绒(火绒终端安全管理系统V2.0)安装