课程设计(论文)-基于安卓的答题闹钟的设计与实现.doc_第1页
课程设计(论文)-基于安卓的答题闹钟的设计与实现.doc_第2页
课程设计(论文)-基于安卓的答题闹钟的设计与实现.doc_第3页
课程设计(论文)-基于安卓的答题闹钟的设计与实现.doc_第4页
课程设计(论文)-基于安卓的答题闹钟的设计与实现.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

梧 州 学 院信息与电子工程学院课程设计课程名智能手机软件开发技术题 目基于安卓的答题闹钟的设计与实现专 业计算机科学与技术(嵌入式系统方向)班 级13计算机嵌入式系统班学 号学生姓名2016年12月摘要随着智能手机的迅速发展,它一步步走进了普通人的生活,成为人们获得即时信息的主要设备。 因此,手机的应用软件将会有非常大的发展空间,其中闹钟是人们日常生活中必不可少的应用软件。 普通的闹钟要关闭的话比较简单,这使得有些人关了闹钟之后还是迷迷糊糊的,有的甚至还会一不小心又睡着了,而答题闹钟是需要回答问题才能够关掉闹钟,这样的话关闭闹钟的时候人基本上已经清醒了,就不会那么容易再次睡着了。Android 平台也提供给用户方便、快捷的服务。另外, Android 平台基本都是免费的,这让软件开发缩小了成本,也吸引更多人投入 Android 的软件开发,使 Android 的平台更加具有竞争性, 也能使每个用户能够获得更好的体验与服务。本文讲述了国内外安卓手机系统及应用的研究概况,对其发展趋势做了分析,同时介绍了 Android 的相关技术和应用程序结构。进而研究分析了Android平台的系统构架和组件模型, 接着解析了 Android 中重要的 API 和应用构成,以及 Intent 和生命周期的机制。 在简要讲述了 Android 的开发环境的搭建过程后,对答题闹钟设计的相关技术进行了分析和概括,在此基础上,进行答题闹钟的设计与实现,本系统界面舒服,操作简便,具有良好的可扩展性;系统经过测试,可以稳定运行,能够满足手机用户的基本需求。关键词:安卓;答题闹钟;智能手机平台IIThe Designing and Implement of answer alarm clock based on AndroidAbstractWith the rapid development of smart phones, it step by step into the lives of ordinary people, people become instant access to the main equipment. Therefore, the mobile phone application software will have a very large space for development, which alarm clock is essential in peoples daily lives application software. The ordinary alarm clock to close it is relatively simple, which makes some people off after the alarm still sleepy, some even accidentally fell asleep again, and the answer alarm is to answer questions to turn off the alarm clock, then turn off the alarm when people basically already awake, would not be so easy fell asleep again. Android platform also provides users with convenient and efficient service. In addition, the Android platform is basically free, which makes the cost of software development lower software development also attract more people to join the Android, the Android platform more competitive and also enables each user to get a better experience and services.This paper describes the research situation at home and abroad Android mobile phone system and application, the trend of its development is analyzed, and introduces the Android technology and application structure. Then the system architecture and component model of Android platform are studied and analyzed, then the important API and application components in Android are analyzed, as well as the mechanism of Intent and life cycle. In the process of setting up briefly about the Android development environment, technology related to answer alarm clock design are analyzed and summarized, based on the design and implementation of answering alarm, the system interface is comfortable, convenient operation, has good expansibility; the system after the test, can run stably and can meet the the basic needs of mobile phone users.Keywords: android; answer alarm clock; smart phone platform目录第一章 前言11.1 设计背景及意义11.2 研究内容1第二章 开发工具与环境22.1 开发工具及环境简介22.1.1 Eclipse22.1.2 ADT22.1.3 Android SDK22.1.4 AVD22.2 Android应用程序的主要结构32.2.1 Activity概述32.2.2 Service32.3 Android的基本架构3第三章 系统的分析与设计53.1 Android权限的获取53.2 Android用户界面构建53.3 资源的获取和使用6第四章 系统的详细设计74.1 系统功能模块设计74.2 系统界面详细设计74.2.1 程序主界面面设计74.2.2 添加闹钟模块94.2.3 设置模块114.2.4 闹铃开始模块15第五章 总结17参考文献18V第一章 前言1.1 设计背景及意义随着智能手机的迅速发展,它一步步走进了普通人的生活,成为人们获得即时信息的主要设备。 因此,手机的应用软件将会有非常大的发展空间,其中闹钟是人们日常生活中必不可少的应用软件。 人们上班、上学等等都要闹钟来让自己起床,普通的闹钟要关闭的话比较简单,这使得有些人关了闹钟之后还是迷迷糊糊的,有的甚至还会一不小心又睡着了,而答题闹钟是需要回答问题才能够关掉闹钟,这样的话关闭闹钟的时候人基本上已经清醒了,就不会那么容易再次睡着了。答题闹钟与普通的闹钟比主要是多了个答题模式,答题模式就是当闹钟响起时,想要关闭它只有答对相应的题目,这样就可以让人清醒一点了,从而达到叫醒人的目的。答题模式可以打开也可以关闭,关闭答题模式之后就和普通的闹钟差不多了。还可以通过设置改变需要回答的题目的数量来决定闹钟的关闭。答题闹钟对于一些喜欢赖床的人还是有一定的好处的,对于普通的闹钟,有时侯会迷迷糊糊的醒来就出于惯性地就关了闹钟,然后人还没有完全醒来,这个时候人很容易就继续睡着了。而答题闹钟需要答对题才能关闭闹钟,答题须要思考,这样人就容易清醒一些,就没那么容易继续睡着了。1.2 研究内容此次设计采用的操作系统是Android操作系统,利用Eclipse集成开发工具进行程序的编写、编译、调试和运行。本软件主要有闹钟设置、闹钟创建等模块。软件的设计步骤:1) 了解相关资料及研究意义,确定实现技术与方式设计总目标及其整体框架。2) 了解用户的使用习惯和使用心理,进行用户需求分析和规范。3) 草拟功能模块,画出模块图。4) 收集软件制作素材。5) 界面设计及完善,编写代码。6) 编写代码实现各个功能模块。7) 根据Android特有的使用风格进行布局与优化。8) 完成系统测试并改进。第二章 开发工具与环境2.1 开发工具及环境简介2.1.1 EclipseEclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。虽然大多数用户很乐于将 Eclipse 当作 Java 集成开发环境(IDE)来使用,但 Eclipse 的目标却不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所1。这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用Java语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如C/C+、COBOL、PHP等编程语言的插件已经可用,或预计将会推出。Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础。2.1.2 ADTAndroid的ADT是Android为Eclipse定制的一个插件,它提供了开发Android 程序的综合环境。它不仅扩展了Eclipse的功能(如设置程序断点、查看线程和进行信息等),还提供了一个Android代码编辑其,用于为Android的Manifest和其他相关的资源文件编写有效的XML文件。程序开发者可以添加组件,可以用SDK工具集调试应用程序,也可以导出签名或未签名的APK文件,以便在手机上发布应用程序2。2.1.3 Android SDKSDK: (Software Development Kit) 软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。Android SDK提供的API是一个庞大的程序设计实例库,它包含了应用程序。属性提供、图形处理、多媒体、操作系统、文字编辑与显示组件等工具3。2.1.4 AVDAVD: (Android Virtual Device) 手机虚拟设备。手机虚拟设备AVD可以帮助程序开发人员在计算机上模拟真实的手机环境来测试所开发的Android应用程序4。2.2 Android应用程序的主要结构2.2.1 Activity概述Activity是最常用的。每个Activity都是Activity的子类,并实现了一些独有的功能,如管理UI显示和UI的反馈事件。一个Activity就相当于应用程序的一个用户界面,由事件响应以及视图等组成。大多数的应用程序通常包括多个界面。例如:一个文本聊天应用程序,至少应该包含一个联系人列表界面、一个聊天界面、一个设置界面、一个聊天记录查询界面等等。每个界面其实都可看作是一个Activity。显示一个新界面就相当于生成一个对应的Activity对象。在一些情况下,Activity能够返回给它的上级界面一个返回值,例如一个提供给用户选择照片的Activity可以返回给它的调用者用户选择了哪个照片文件5。当一个新的Activity出现时,前一个Activity被中断并被放入到一个历史堆栈中。用户可以使用返回键使前一个Activity重现。当一个Activity不再需要时,可以将它们从历史堆栈中移除。默认情况下,Android会为每个应用程序保留从主界面开始的历史堆栈6。Android通过一个被称作Intent的特殊类,来实现界面与界面之间的跳转。一个Intent描述了一个应用程序想要做什么。在Intent的描述结构中,含有两个重要的数据结构:动作和动作对应的数据。典型的动作类型包括MAIN、VIEW、PICK、EDIT等等,而动作对应的数据则以URI的形式表示。2.2.2 ServiceService 是运行在后台的具有较长生命周期却没有用户界面的程序,它一般负责处理一些用户看不到但会持续一定时间的事情,如后台播放音乐等就是典型的Service服务,这个动作由播放音乐的Service进行控制。所有的Service继承自系统的Service类,并且在配置文件爱你中进行注册。一般地,Service由Activity启动,但它并不依赖于Activity。因此,即使Activity结束后,可能Service仍会运行,直到其生命周期结束(如用户按下了停止音乐播放的快捷键是)7。2.3 Android的基本架构Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个Java的application framework,所有的应用程序都是基于Java的application framework之上。Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux核心层。Android的基本架构如图2-1所示8。图2-1 Android的基本架构图第三章 系统的分析与设计在Android平台下开发位置闹钟软件采用的关键技术包括Android权限的获取问题、用户界面构架问题、资源的获取和使用问题。3.1 Android权限的获取Android安全中的一个重要的设计点是在默认情况下应用程序没有权限执行对其它应用程序、操作系统或用户的有害操作。这些操作包括读/写用户的隐私数据(例如联系方式或(e-mail),执行网络访问,保持设备Activity,等等。应用程序的进程是一个安全的黑盒子,它不能干扰其它应用程序,除非给它声明权限,现对权限的命名和获取问题做下说明9。1) 权限命名一个基本的Android应用程序没有与其相关联的权限,意味着它不能做任何影响用户体验或设备中数据的有害操作。在应用程序需要时,可在AndroidManifest.xml文件中列举一个或更多的标签来声明此权限。1) 在AndroidManifest.xml文件中支持权限通过AndroidManifest.xml文件可以设置高级权限,用来限制访问组件或应用程序。所以如果要访问某组件,需要在这个文件里声明一个权限,现对跟本系统有关的组件权限做以下说明。1 Activity权限(使用标签)限制能够启动与Activity权限相关联的组件或应用程序。此权限在Context.startActivity()和Activity.startActivityForResult期间要经过检查;如果调用者没有请求权限,那么会为调用抛出一个安全异常。2 BroadcastReceiver权限(使用标签)限制能够为相关联的接收器发送广播的组件或应用程序。在Context.sendBroadcast()期间,此权限将被检查,同时系统设法将广播递送至相关接收器。因此,权限失败将会导致抛回给调用者一个异常。3.2 Android用户界面构建在Android平台下开发应用软件,最重要的是布局问题。一个好看而又简洁的界面,是相当重要的,既能提高使用者的体验,又保证应用的高效执行。Android生成用户界面有三种方式:xml配置生成、通过用户自己的界面接口生成和直接用代码生成。对于一个Activity应用来说,android.app.Activity类是一个最基本的功能单元。一个Activity实例可以做很多的事情,但是它本身无法显示在屏幕上,而是借助于View group和View,这两个是Android平台上最基本的两个用户界面表达单元。下面介绍下主要的布局对象:线性布局(Linear Layout):以单一方向对其中的显示对象进行排列显示。如以垂直排列显示,则布局管理器中将只有一列;如以水平排列显示,则布局管理器中将只有一行。同时,还可以对个别的显示对象设置显示比例。表格布局(Table Layout):以拥有任意行列的表格对显示对象进行布局,每个显示对象被分配到各自的单元格之中,但单元格的边框线不可见。绝对布局(Absolute Layout):允许以坐标的方式,指定显示对象的具体位置,左上角的坐标为(0,0),向下及向右,坐标值变大。这种布局管理器由于对象的位置固定了,所以在不同的设备上,有可能会出现不一样的显示效果。相对布局(Relative Layout):允许通过指定显示对象相对于其它显示对象或父级对象的相对位置来布局。一个按钮可以放于另一个按钮的右边,或者可以放在布局管理器的中央。对于Android应用中的一个屏幕,它的屏幕元素是按层次结构来描述的。要将一个屏幕元素层次树绑定在一个屏幕上显示,Activity会调用它的setContentView()方法并且传入这个层次树的根节点引用。3.3 资源的获取和使用资源是外部文件(不含代码的文件),它被代码使用并在编译时编入应用程序。Android支持不同类型的资源文件,包括XML、PNG以及JPEG文件。它们在运行的时候被解析,XML文件根据描述不同有不同的格式。源代码以及XML文件将资源打包并编译进二进制文件,这种模式能使得资源更快的被加载。字符串也同样被压缩成更高效的模式。由于这些原因,Android平台上可以有不同的资源类型。Android资源系统能跟踪所有非代码相关的应用程序。程序开发者可以使用资源类来访问应用程序的资源,资源的实例通常和应用程序联系在一起,可以通过Context.getResources来访问。应用程序的资源在编译时就被编译到应用程序二进制代码里。为了使用某个资源,程序开发者需要将它放在对应的代码目录结构里,然后编译。作为编译过程的一部分,产生的资源代号可以在源代码里使用,这就可以用编译器来验证程序代码和定义的资源是否相符。第四章 系统的详细设计4.1 系统功能模块设计系统旨在建立Android系统的闹钟,主要有如下几个核心功能模块如图4-1所示。图4-1 系统功能模块4.2 系统界面详细设计4.2.1 程序主界面面设计程序的主界面面,显示当前已添加的闹钟以及添加闹钟和设置的图标。程序的运行的主界面如图4-2所示。图4-3 程序主界面图主要代码:/初始化private void init() /初始化按钮并添加onClick时间findViewById(R.id.ib_add).setOnClickListener(this);findViewById(R.id.ib_setting).setOnClickListener(this);lv_clocks = (ListView) findViewById(R.id.lv_clocks);lv_clocks.setDivider(new ColorDrawable(Color.WHITE); lv_clocks.setDividerHeight(1); /得到当前所有闹钟getAlarms(this);adapter = new AlarmAdapter();lv_clocks.setAdapter(adapter);/获得当前所有闹钟private void getAlarms(Context context) Log.v(TAG, 获得闹钟列表);alarms = AlarmHandle.getAlarms(context);4.2.2 添加闹钟模块添加闹钟模块用来添加闹钟,进入程序的主界面点加号那个图标就能进入添加闹钟模块了,进入添加闹钟模块后如图4-4所示。图4-4 添加闹钟模块主要代码:/* * 初始化 */private void init() context = this;timePicker = (TimePicker) findViewById(R.id.clock);/设置24小时制timePicker.setIs24HourView(true);/设置禁止键盘输入timePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);tv_repeat = (TextView) findViewById(R.id.tv_repeat);tv_bell = (TextView) findViewById(R.id.tv_bell);tv_label = (TextView) findViewById(R.id.tv_label);cb_vibration = (CheckBox) findViewById(R.id.cb_offon);bt_del = (Button) findViewById(R.id.bt_del);/判断是新建还是编辑alarm = (Alarm) getIntent().getSerializableExtra(alarm);if(alarm = null )/新建isNew = true;(TextView)findViewById(R.id.tv_title).setText(新建闹钟);Calendar calendar = Calendar.getInstance();hour = calendar.get(Calendar.HOUR_OF_DAY);minute = calendar.get(Calendar.MINUTE);timePicker.setCurrentHour(hour);timePicker.setCurrentMinute(minute);tv_repeat.setText(只响一次);bellPath = getDefaultbell();String temp = bellPath.split(/);tv_bell.setText(temptemp.length - 1.split(.)0);cb_vibration.setChecked(true);tv_label.setText(闹钟);/隐藏删除按钮bt_del.setVisibility(View.GONE);else/编辑isNew = false;(TextView)findViewById(R.id.tv_title).setText(编辑闹钟);timePicker.setCurrentHour(alarm.hour);timePicker.setCurrentMinute(alarm.minutes);hour = alarm.hour;minute = alarm.minutes;tv_repeat.setText(alarm.repeat);repeatOld = alarm.repeat.equals(只响一次) ? 0 :alarm.repeat.equals(周一到周五) ? 1 :2;repeat = repeatOld;bellPath = alarm.bell;String temp = bellPath.split(/);tv_bell.setText(temptemp.length - 1.split(.)0);cb_vibration.setChecked(alarm.vibrate = 1 ? true : false);tv_label.setText(alarm.label);/显示删除按钮bt_del.setVisibility(View.VISIBLE);bt_del.setOnClickListener(this);findViewById(R.id.tv_cancel).setOnClickListener(this);findViewById(R.id.tv_ok).setOnClickListener(this);findViewById(R.id.ll_repeat).setOnClickListener(this);findViewById(R.id.ll_bell).setOnClickListener(this);findViewById(R.id.ll_label).setOnClickListener(this);cb_vibration.setOnClickListener(this);timePicker.setOnTimeChangedListener(new OnTimeChangedListener() Overridepublic void onTimeChanged(TimePicker view, int hourOfDay, int mit) / TODO Auto-generated method stubhour = hourOfDay;minute = mit;);4.2.3 设置模块设置模块可以设置静音模式时闹钟是否响铃,也可以设置答题模式是否开启,还可以设置需要回答的题目的数量。设置模块效果图如图4-5所示。图4-5 设置模块图主要代码:Overrideprotected Dialog onCreateDialog(int id) / TODO Auto-generated method stubDialog dialog = null;switch(id)case CANCEL:dialog = new AlertDialog.Builder(context).setTitle(R.string.action_settings).setMessage(是否放弃本次设置?).setNegativeButton(否, null).setPositiveButton(是, new OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) dialog.dismiss();finish();).create();break;case SHOW_CANCEL_MODE:dialog = new AlertDialog.Builder(context).setTitle(R.string.cancel_alarm_mode).setSingleChoiceItems(R.array.cancel_bell_mode, cancelAlaemMode, new OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) tv_cancel_mode.setText(getResources().getStringArray(R.array.cancel_bell_mode)which);cancelAlaemMode = which;if(which = 0)ll_num_times.setVisibility(View.VISIBLE);ll_shake.setVisibility(View.GONE);elsell_num_times.setVisibility(View.GONE);ll_shake.setVisibility(View.VISIBLE);dialog.dismiss();).setNegativeButton(取消, null).create();break;case SHOW_NUM_TIMES:LayoutInflater inflater = LayoutInflater.from(context);final View view = inflater.inflate(R.layout.num_label, null);final EditText et_times = (EditText) view.findViewById(R.id.et_times);et_times.setText(times);dialog = new AlertDialog.Builder(context).setTitle(R.string.num_time).setView(view).setNegativeButton(取消, null).setPositiveButton(确定, new OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) if(!TextUtils.isEmpty(et_times.getText() & !0.equals(et_times.getText().toString().trim()times = et_times.getText().toString().trim();elsetimes = 3;if(3.equals(times)tv_num_time.setText(times + (默认);elsetv_num_time.setText(times);).create();break;case SHOW_SHAKE_ITEM:dialog = new AlertDialog.Builder(context).setTitle(R.string.shake_title).setSingleChoiceItems(R.array.shake_item, shakeItemIndex, new OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) tv_shake.setText(getResources().getStringArray(R.array.shake_item)which);shakeValue = shakeValueswhich;System.out.println(shakeValue);dialog.dismiss();).setNegativeButton(取消, null).create();break;dialog.setCanceledOnTouchOutside(false

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论