基于Android手机的手电筒程序的实现模板.docx
- 文档编号:26007452
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:24
- 大小:242.52KB
基于Android手机的手电筒程序的实现模板.docx
《基于Android手机的手电筒程序的实现模板.docx》由会员分享,可在线阅读,更多相关《基于Android手机的手电筒程序的实现模板.docx(24页珍藏版)》请在冰豆网上搜索。
基于Android手机的手电筒程序的实现模板
课程设计报告
课程设计名称:
嵌入式系统综合课程设计
课程设计题目:
基于Android手机的手电筒程序的实现
院(系):
计算机学院
专业:
班级:
学号:
姓名:
指导教师:
完成日期:
目录
第1章系统分析1
1.1需求分析1
1.2硬件分析1
1.2.1实验环境2
1.2.2相关硬件简介2
1.3软件分析2
1.3.1嵌入式操作系统简介3
1.3.2开发技术简介4
第2章系统设计5
2.1操作系统移植5
2.2系统模块设计5
2.3关键流程6
2.3.1系统主流程图6
2.3.2开灯流程图7
2.3.3屏幕背光流程图8
2.3.4SOS流程图9
第3章系统调试及运行10
3.1调试分析10
3.2结果分析11
参考文献13
附录14
第1章系统分析
1.1需求分析
在现代社会中,手机的功能越来越丰富,给生活带来了极大的趣味性和便捷性。
手电筒是生活中最普通的生活必需品,它在我们身处黑暗时给予我们光亮。
传统的手电筒体积较大,需要电池,不方便携带。
手机与手电筒的结合恰恰可以解决传统手机带来的不便,同时还可以节约资源,保护环境。
既可以让用户及时获得手电筒带来的益处,也可以让生活更加便捷,高效。
1.2硬件分析
Android是一个以Linux为基础的半开源操作系统,主要用于移动设备,由Google和开放手持设备联盟开发与领导。
Android的HAL(硬件抽像层)是能以封闭源码形式提供硬件驱动模块。
HAL的目的是为了把Androidframework与Linuxkernel隔开,让Android不至过度依赖Linuxkernel,以达成kernelindependent的概念,也让Androidframework的开发能在不考量驱动程序实现的前提下进行发展。
HALstub是一种代理人(proxy)的概念,stub是以*.so档的形式存在。
Stub向HAL“提供”操作函数(operations),并由Androidruntime向HAL取得stub的operations,再callback这些操作函数。
HAL里包含了许多的stub(代理人)。
Runtime只要说明“类型”,即moduleID,就可以取得操作函数。
Android本身是一个权限分立的操作系统。
在这类操作系统中,每个应用都以唯一的一个系统识别身份运行(Linux用户ID与群组ID)。
系统的各部分也分别使用各自独立的识别方式。
Linux就是这样将应用与应用,应用与系统隔离开。
在Android开发中,我们就是通过ID来调用或更改组件的。
Android平台提供给第三方开发者一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰。
在本次课程设计中用到的是Android4.4.2,型号为SM-N9002的三星手机。
1.2.1实验环境
1)JDK(JavaDevelopmentKit)
JDK是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。
2)Eclipse
Eclipse是一个开放源代码的、基于Java的可扩展开发平台。
就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。
幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。
3)SDK(softwaredevelopmentkit)
SDK是软件开发工具包。
被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。
4)ADT(AbstractDataType)
抽象数据类型(ADT)是一个实现包括储存数据元素的存储结构以及实现基本操作的算法。
其中包括数据对象,数据关系和基本操作。
1.2.2相关硬件简介
在安卓手机上绝大多数的处理器都是ARM处理器,ARM处理器的三大特点是:
耗电少功能强、16位/32位双指令集和合作伙伴众多。
其具体体现是:
1)体积小、低功耗、低成本、高性能;
2)支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件;
3)大量使用寄存器,指令执行速度更快;
4)大多数数据操作都在寄存器中完成;
5)寻址方式灵活简单,执行效率高;
6)指令长度固定。
1.3软件分析
本次课程设计用到的软件是Eclipse,此软件是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。
它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成。
具体包括四个部分组成——EclipsePlatform、JDT、CDT和PDE。
JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,EclipsePlatform则是一个开放的可扩展IDE,提供了一个通用的开发平台。
它提供建造块和构造并运行集成软件开发工具的基础。
EclipsePlatform允许工具建造者独立开发与他人工具无缝集成的工具从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。
1.3.1嵌入式操作系统简介
从嵌入式系统的应用来分类,可以分为面向低端设备的嵌入式操作系统和面向高端设备的嵌入式操作系统。
(低端:
微波炉,洗衣机,冰箱;高端:
信息化家电,掌上电脑,机顶盒,路由器)
嵌入式操作系统(EmbeddedOperationSystem,EOS)是一种用途广泛的系统软件,过去它主要应用于工业控制和国防系统领域。
EOS负责嵌入系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。
它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。
EOS从单一的弱功能向高专业化的强功能方向发展。
嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固化以及应用的专用性等方面具有较为突出的特点。
EOS是相对于一般操作系统而言的,它除具有了一般操作系统最基本的功能,还有以下功能:
如任务调度、同步机制、中断处理、文件处理等。
嵌入式操作系统特点:
1)良好的移植性、开放性、可伸缩性的体系结构,提供各种设备驱动接口。
EOS实时性一般较强,可用于各种设备控制当中。
操作方便、简单、提供友好的图形GUI,图形界面,追求易学易用。
提供强大的网络功能,支持TCP/IP等协议,提供TCP/UDP/IP/PPP协议支持及统一的MAC访问层接口,为各种移动计算设备预留接口。
2)强稳定性,弱交互性。
嵌入式系统一旦开始运行就不需要用户过多的干预,这就要负责系统管理的EOS具有较强的稳定性。
嵌入式操作系统的用户接口一般不提供操作命令,它通过系统调用命令向用户程序提供服务。
3)固化代码。
在嵌入系统中,嵌入式操作系统和应用软件被固化在嵌入式系统计算机的ROM中。
辅助存储器在嵌入式系统中很少使用,因此,嵌入式操作系统的文件管理功能应该能够很容易地拆卸,而用各种内存文件系统。
1.3.2开发技术简介
Android以Java为编程语言,使接口到功能,都有层出不穷的变化,其中Activity等同于J2ME的MIDlet。
一个Activity类负责创建视窗,一个活动中的Activity就是在foreground模式,背景运行的程序叫做Service。
两者之间通过由ServiceConnection和AIDL连结,达到程序同时运行的效果。
如果运行中的Activity全部画面被其他Activity取代时,该Activity便被停止,甚至被系统清除。
View等同于J2ME的Displayable,程序人员可以通过View类与“XMLlayout”档将UI放置在视窗上,Android4.4.2的版本可以利用View打造出所谓的Widgets,其实Widget只是View的一种,所以可以使用xml来设计layout,HTC的AndroidHero手机即含有大量的widget。
至于ViewGroup是各种layout的基础抽象类,ViewGroup之内还可以有ViewGroup。
View的构造函数不需要再Activity中调用,但是Displayable的是必须的,在Activity中,要通过findViewById()来从XML中取得View,Android的View类的显示很大程度上是从XML中读取的。
View与事件息息相关,两者之间通过Listener结合在一起,每一个View都可以注册一个eventlistener,例如:
当View要处理用户触碰的事件时,就要向Android框架注册View.OnClickListener。
Android应用开发基础:
Android开发平台、Eclipse+ADT开发环境、AVD及传感模拟器调试、Android核心组件、Android常用组件、Android高级组件、文件及网络访问、SQLite数据库编程、后台服务编程。
Android高级应用开发:
音频\视频\摄像头、互联网应用、GPS和位置服务、GoogleMap、2D\3D绘制、传感器开发、游戏开发、电话及SMS服务、网络\Bluetooth\Wi-Fi等
Android系统级开发:
移植、驱动、NDK(C方向)。
第2章系统设计
2.1操作系统移植
嵌入式操作系统与通用操作系统的最显著的区别之一就是它的可移植性。
一款嵌入式操作系统通常可以运行在不同体系结构的处理器和开发板上。
为了使嵌入式操作系统可以在某款具体的目标设备上运行,嵌入式操作系统的编写者须把一部分与具体硬件设备相关的代码作为抽象的接口保留出来,让提供硬件的OEM厂商来完成。
这样才可以保证整个操作系统的可移植性。
这些代码通常是板级支持包(BoardSupportPackage,BSP)的一部分。
在此次课程设计中是将在Eclipse中编写好的程序移植到了安卓(Android4.4.2)手机上,安卓手机的处理器是ARM。
2.2系统模块设计
设计分为三个模块:
开灯模块、屏幕背光模块和SOS模块。
系统模块设计图如图2.1所示。
图2.1系统模块图
手电筒模块是调用手机相机的闪光灯,通过它的长亮和关闭来实现手电筒的亮灭。
屏幕背光模块是调用屏幕亮度的函数,通过改变它的参数值将屏幕亮度调到最亮或调到最暗。
SOS模块是通过重复对background赋颜色的十六进制码,来实现屏幕的一直红白闪烁。
2.3关键流程
2.3.1系统主流程图
进入主界面后,有三个功能可以选择:
开灯、调节屏幕背光到最亮和打开SOS。
系统主流程图如图2.2所示。
图2.2系统主流程图
2.3.2开灯流程图
进入APP后,系统监听“开灯”按钮,当按钮被按下,进入开灯模块。
通过手机相机闪光灯的长亮、关闭,实现手电筒的开启、关闭。
开灯流程图如图2.3所示。
图2.3开灯流程图
2.3.3屏幕背光流程图
进入APP后,系统监听“屏幕背光”按钮,当按钮被按下,进入银幕背光模块。
通过调用调节屏幕亮度的函数,将其参数值改为“1”(参数值从0到1的变化,代表了屏幕的由暗到亮的过程)。
屏幕背光流程图如图2.4所示。
图2.4屏幕背光流程图
2.3.4SOS流程图
进入APP后,系统监听“SOS”按钮,当按钮被按下,进入SOS模块。
调用定时器内的函数run(),更改背景颜色实现屏幕的红白闪烁。
当按钮再次被按下时,即退出SOS模块。
SOS流程图如图2.5所示。
图2.5SOS流程图
第3章系统调试及运行
3.1调试分析
1)在调试开灯模块时,一点击开灯按钮,APP就自动退出。
解决方法:
是在AndroidManifest.xml文件中申明对手机相机和闪光灯的调用写下以下两句话:
name="android.permission.CAMERA"/> name="android.permission.FLASHLIGHT"/> 2)在调试屏幕背光模块时,屏幕背光亮度亮度达不到最亮。 解决方法: 是在MainActivity中的屏幕亮度函数调用中加入以下三句话(wl.screenBrightness的值从0到1,代表了由暗到亮): WindowManager.LayoutParamswl=getWindow().getAttributes(); wl.screenBrightness=1; getWindow().setAttributes(wl); 3)在调试SOS模块时,在启动SOS按钮后,会直接退出APP。 解决方法: 当点击SOS按钮后有超过5s的延迟,我们的界面将处于一直假死状态,系统将处于异常,自动退出。 因此在SOS模块中加入Handler()函数。 Handler()函数是在用户界面开发时,控制主用户界面程序的界面变化。 它的作用是与其它线程协同工作,接收其他线程的消息并通过接收到的消息更新主用户界面线程的内容。 用户界面的更新只能在本线程中完成,其他线程无法直接对主线程进行操作。 在主线程中绑定Handler,并在事件触发上面创建新的线程用于完成某些耗时的操作,当子线程中的工作完成之后,会对Handler发送一个完成的信号,而Handler接收到信号后,就进行主UI界面的更新操作。 4)在调试SOS模块时,在准备退出SOS,点击SOS按钮后,系统会时而会在红色背景时停止,时而在白色背景时停止。 解决方法: 在判断第二次按下SOS按钮中,设置背景颜色为白色。 3.2结果分析 1)软件主界面如图3.1所示。 . 图3.1软件主界面图 2)屏幕背光界面如图3.2所示。 图3.2屏幕背光 3)SOS红色界面如图3.3所示。 图3.3SOS红色界面 4)开灯界面如图3.4所示。 图3.4开灯界面 参考文献 [1]高凯等编著.Android程序设计基础教程[M].北京: 国防工业出版社,2015 [2]韩超.Android系统原理及开发要点详解[M].北京: 电子工业出版社,2010 [3]李鲁群等编著.Android应用程序设计[M].北京: 清华大学出版社,2015 [4]陈璟,陈平华,李文亮.Android内核分析[J].广东工业大学计算机学院实践与经验,2009: 112-115. [5]王翠萍编著.Android经典项目开发实战[M].北京: 清华大学出版社,2015 [6]吴亚峰等编著.Android应用案例开发大全[M].北京: 人民邮电出版社,2015 [7]李鲁群等编著.Android应用程序设计[M].北京: 清华大学出版社,2015 [8]邓文渊等.Android开发基础教程[M].北京: 人民邮电出版社,2014 [9]郭志安.Android应用开发详解[M].北京: 电子工业出版社,2010 [10]杨丰盛.Android应用开发揭秘[M].北京: 科学出版社,2010 [11]SatyaKomatineni,DaveMaclean.ProAndroid4[M].USA: Apress,2012 附录 MainActivity.java: packagecom.example; importjava.util.Timer; importjava.util.TimerTask; importandroid.app.Activity; importandroid.content.res.Resources; importandroid.graphics.drawable.Drawable; importandroid.hardware.Camera; importandroid.hardware.Camera.Parameters; importandroid.os.Bundle; importandroid.os.Handler; importandroid.os.Message; importandroid.util.Log; importandroid.view.Menu; importandroid.view.MenuItem; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.view.WindowManager; importandroid.widget.Button; publicclassMainActivityextendsActivity{ Timertimer; privateButtonloginButton; privateButtonloginButton1; privateButtonloginButton2; privatebooleanisopent=false; privatebooleanisopen=false; privateCameracamera; Handlerhandler=null; privatebooleanisopent1=false; privatebooleanm_sos_flag=false; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); loginButton=(Button)findViewById(R.id.button1); loginButton1=(Button)findViewById(R.id.button2); loginButton2=(Button)findViewById(R.id.button3); //lp.screenBrightness=0.1f; loginButton.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ //TODOAuto-generatedmethodstub if(! isopent){ camera=Camera.open(); Parametersparams=camera.getParameters(); params.setFlashMode(Parameters.FLASH_MODE_TORCH); camera.setParameters(params); camera.startPreview();//开始亮灯 isopent=true; }else{ camera.stopPreview();//关掉亮灯 camera.release();//关掉照相机 isopent=false; } } });//开灯的监听 loginButton1.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ //TODOAuto-generatedmethodstub if(! isopen){ WindowManager.LayoutParamswl=getWindow().getAttributes(); wl.screenBrightness=1; getWindow().setAttributes(wl); isopen=true; }else{ WindowManager.LayoutParamswl=getWindow().getAttributes(); wl.screenBrightness=3/4; getWindow().setAttributes(wl); isopen=false; } } });//屏幕背光的监听 loginButton2.setOnClickListener(newOnClickListener(){ @Override publicvoidonClick(Viewv){ //TODOAuto-generatedmethodstub if(! isopent1){ timer=newTimer(); timer.schedule(newTimerTask(){ @Override publicvoidrun(){ if(m_sos_flag){ Messagemessage=newMessage(); message.what=1; handler.sendMessage(message); m_sos_flag=false; isopent1=true; } else{ Messagemessage=newMessage(); message.what=0; handler.sendMessage(message); m_sos_flag=true; isopent1=true; } //isopent1=true; } },50,200); } else{ Messagemessage=newMessage(); message.what=3; handler.sendMessage(message); } } });//SOS handler=newHandler() { @Override publicvoidhandleMessage(Messagemsg){ //TODOAuto-generatedmethodstub switch(msg.what) { case1: Resourcesres=getResources(); Drawabledrawable=res.getDrawable(R.drawable.bkcolor); MainActivity.this.findViewById(R.id.background).setBackgroundDrawable(drawable); break; case0: Resourcesres1=getResources(); Drawable
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Android 手机 手电筒 程序 实现 模板