基于Android的手机计步器的设计与实现专业工程综合实训设计报告.docx
- 文档编号:4904040
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:73
- 大小:1.04MB
基于Android的手机计步器的设计与实现专业工程综合实训设计报告.docx
《基于Android的手机计步器的设计与实现专业工程综合实训设计报告.docx》由会员分享,可在线阅读,更多相关《基于Android的手机计步器的设计与实现专业工程综合实训设计报告.docx(73页珍藏版)》请在冰豆网上搜索。
基于Android的手机计步器的设计与实现专业工程综合实训设计报告
专业工程综合实训设计报告
第一章绪论
1.1课题的背景及意义
当今社会,手机已经成为人们工作生活中必不可少的一项通讯和娱乐工具,随着手机的不断更新,手机的各种高层服务和应用层出不穷。
现在智能手机可谓是爆发式增长,与此同时传统手机在不断地消失,诺基亚就是在这样的环境中受到了重创。
现在主要有三个使用率和关注度最高的手机平台,分别是:
Android,ios和windowsphone平台,在这三个平台中Android的占有率最高。
自2007年11月Google公司发布Android系统以来,短短几年时间,Android已经占据了智能手机市场的半壁江山,成为目前最为炙手可热的智能手机操作系统。
Android走进了越来越多人的生活,成为他们获取信息的主要平台。
Android平台对于Google和用户的意义不在于手机本身,而在于为了推动移动互联网产业链的迅速成型。
具有开源性的Android手机平台与之前Symbian、windowsmobile等操作系统不同,它们收取高额的授权费用,而Android不需要,这样使得应用开发成本大大降低;也正是由于它的源代码是开放的,使得开发者可以随心所欲的开发应用。
同时,手机生产商和软件开发商也能够在这里得到利润,手机软件得到有效的维护协调发展。
这正是Google发布Android平台的意义,也是Android平台的使命所在。
同时目前搭载Android平台的应用有很多,但针对传感器而开发的应用市场上还不多见。
本应用正是针对Android手机内置的加速度传感器而特别设计的应用。
所以鉴于移动端应用开发是目前软件开发行业正在兴起并会越来越炙手可热的一个分支,并且针对传感器的开发相对空白我选择了研究此课题。
1.2系统框架
在设计一款软件时一般都会把它分成几个模块,在模块的基础上还会再分小模块,这样就达到了软件模块化设计的要求,然后再对各个小模块进行详细设计和编写,采用模块化的管理方式可以使软件结构更清晰,也使得软件的管理更有秩序,使别人容易理解和阅读,但是这些模块也要根据别的模块来设计和约束,不能随便设计脱离框架,设计完成后需要把每个设计完成的模块根据总体框架结合起来。
根据本软件的功能需求,将本软件分为以下几个功能模块,如图1-1所示:
图1-1整体框架图
第二章系统分析
2.1系统可行性分析
可行性分析(Feasibility Analysis)也称为可行性研究,是在系统调查的基础上,针对刚刚开发打算进一步应用的系统的必要性和可能性的分析和研究。
可行性研究的目的主要在于,用最小的代价在尽可能短的时间内确定问题是否能够解决。
[1]
该阶段通过对系统总目标的初步调研与分析,提出可行性方案并进行论证。
2.1.1功能可行性分析
1、计步功能:
根据用户设置的步长和体重,估算用户步行运动所消耗的热量。
当距离发生改变时在前台界面上刷新用户步行的步数、距离、和消耗的卡路里;该计步功能还实现了Notification后台运行的功能。
2、设置参数功能:
设置用户的步长、体重2个参数信息。
通过设置体重可以估算出不同体重的人运动所消耗的卡路里量。
3、退出系统功能:
当用户想终止计步软件时,可以点击退出菜单后退出本系统。
4、历史记录功能:
用户可以查看以往的历史记录。
5、保存功能:
有户可以保存当天的运动量,以便之后查看。
2.1.2运行环境可行性分析
本软件是在windows7操作系统中,利用Eclipse开发工具搭载AndroidSDK工具包,结合Android手机自带的sqlite数据库进行开发。
2.2开发环境简介
2.2.1JavaDevelopmentkit(JDK)介绍
JDK是Java语言的软件开发工具包。
本应用用的是JDK的J2ME版,它主要用于移动设备、嵌入式设备上的Java应用程序。
没有JDK的话,无法编译Java程序,所以这是开发Java程序必须安装的工具。
2.2.2AndroidSDK介绍
SDK(softwaredevelopmentkit)软件开发工具包。
被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。
因此,AndroidSDK指的是Android专属的软件开发工具包。
2.2.3Eclipse开发工具介绍
Eclipse是一个开放源代码的、基于插件的可扩展性平台。
也可以说它只是一个框架和一组服务,用于通过插件组件构建开发环境。
Eclipse附带了一些标准的插件集,包括Java开发工具(JDK)。
本次应用就是将Eclipse当作Java集成开发环境来使用,但是它的作用并不仅仅如此。
由于Eclipse中的每样东西都是插件,所以只要有插件就可以使用它,因而不仅仅是Java语言,C/C++、PHP等语言也可以使用Eclipse。
2.2.4AndroidDevelopmentTools(ADT)介绍
目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升级或者变更,简单理解为在Eclipse下开发工具的升级下载工具。
ADT扩展了Eclipse的功能,让我们能快速建立新的Android项目、创建应用程序的用户界面。
它可以帮助Eclipse找到AndroidSDK,再加上Android框架的API组件调试使用AndroidSDK工具,以便APK分发给应用程序。
同时大大减轻了Android应用程序的开发工作量,工具集成XML编辑器,将给开发者一个令人难以置信的开发Android应用环境。
当然如果你不用Eclipse作为你的开发工具,你就不需要下载ADT,只下载SDK即可开发。
[2]
第三章Android开发常用到的技术及环境搭建
3.1Android开发常用到的技术
3.1.1Activity
Activity是Android应用程序开发中最重要的组件。
一个Activity提供一个屏幕,用户可以用来交互以完成某项任务,例如点击、拍照、拨号等。
它是用户与应用交互的直接且最重要的组件。
Activity生命周期可以用几个函数说明:
onCreate():
Activity开始创建时调用;
onStart():
在Activity开始执行时调用,这时Activity已经可见;
onResume():
在Activity获得用户焦点时调用,此时Activity可以和用户交;
onPause():
在Activity被暂停时调用,失去用户焦点,但没有被摧毁;
onStop():
在Activity被停止时调用,此时Activity已经不可见,但仍然没有被摧毁;
onRestart():
在Activity被重新启动时调用;
onDestory():
在Activity被彻底摧毁时调用。
下面用一张图来解释Activity的生命周期在各函数之间的跳转。
如图3-1:
图3-1Activity的生命周期图
3.1.2Service
一个Service是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。
一个很好的例子就是用手机在播放音乐时,用户可以进行其它应用的活动而此时并没有播放音乐的界面,但是音乐在后台播放并不受影响,这就是Service的功劳。
还有就是闹钟提醒,当你设置好闹钟后并不需要一直显示在闹钟那个界面,甚至手机也可以关掉但是只要时间到了,闹钟依然可以提醒,这也是Service的作用。
3.1.3ContentProvider内容提供者
android平台提供了ContentProvider,它是一个应用程序的指定数据集提供数据给其他应用程序。
这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式。
本文用到了文件存储和SharedPreferences的存储方式。
文件存储大家都很熟悉,就是以文件为操作对象,向文件中写入或读取数据。
SharedPreferences可以将数据保存到应用程序的私有存储区,这些存储区中的数据只能被写入这些数据的软件读取。
它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。
例如:
登陆时用到的用户名和密码。
3.1.4Intent信使
Intent也是Android开发者比较重要的一部分,它主要用来解决Android应用的各项组件之间的通讯,被称为Android应用中的信使。
Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。
所以它常被用来启动一个Activity或Service,[3]例如当从一个Activity启动另一个Activity时,可以这样操作,Intentintent=newIntent();intent.setClass(startActivity.this,s
econdActivity.class);this.startActivity(intent)。
3.2环境搭建
首先要有一台安装有Windows系统的计算机,接下来就是安装过程。
3.2.1安装JDK
下载JDK,在这里
1.我的电脑—>属性—>环境变量—>系统变量;
2.JAVA_HOME值为:
D:
\ProgramFiles\jdk(你安装JDK的目录);
3.CLASSPATH值为:
;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;
%JAVA_HOME\bin;
4.Path:
在开始追加%JAVA_HOME\bin;
如果安装成功,打开cmd窗口,输入java--version会出现如图3-1显示的信息:
图3-1JDK安装成功提示信息
3.2.2安装Eclipse
下载Eclipse,这里是网址http:
//www.eclipse.org/downloads/解压后即可使用。
3.2.3AndroidSDK安装
在AndroidDevelopers下载最新版本的压缩包,下载完成后解压到任意路径,运行SDKSetup.exe。
选定你要安装的内容。
这里也需要配置环境变量,在用户变量中新建PATH值为:
AndroidSDK中的tools绝对路径。
[5]
3.2.4ADT安装
打开EclipseIDE,点击菜单中的“Help”然后点击“InstallNewSoftware”,再点击Add...按钮,这时会弹出一个对话框要求输入,Name和Location:
Name项可以自己随便填取,Location输入http:
//dl-with后的下拉列表中选择我们刚才添加的ADT,我们会看到下面出有DeveloperTools,展开它会有AndroidDDMS和AndroidDevelopmentTool,选定他们。
然后按要求一步一步next,完成之后,这个过程可能会很慢。
这取决于网络环境。
最后选择Window->Preferences...在左边的面板选择Android,然后再右侧点击Browse,并选中SDK路径。
点击Apply,到此就配置完成了[6]。
第四章手机计步器的设计与实现
4.1计步器功能的设计
软件采用最主流的Android软件应用开发风格,并使用Android的原生组件进行开发,界面友好,简洁易懂,组建布局具有诱导性,用户使用极其方便快捷。
1、主界面操作流程见图4-1:
图4-1图为主界面操作流程图
2、设置界面操作流程见图4-2:
图4-2图为设置界面操作流程图
3、日历选择界面操作流程见图4-3:
图4-3日历选择界面操作流程图
4、历史界面操作流程见图4-4:
图4-4历史界面操作流程图
5、复位界面操作流程见图4-5:
图4-5复位界面操作流程图
6、关闭程序界面操作流程见图4-6:
图4-6关闭程序界面操作流程图
4.2计步器功能的实现
计步器的主要功能有:
计步开始/暂停,设置,显示运动所消耗的卡路里,走过长度。
本软件是一个结合手机用户特别是智能手机用户常用功能的一个软件平台,本软件可以通过界面快速获取运动的情况,获取信息后可以对这些信息进行个性化处理以方便用户直观的感受运动量。
4.2.1计步开始及暂停
首先对暂停/开始键做一个监听start_pause_button.setOnClickListener(newView.OnClickListener()
同时还要对此时状态做一个判断
start_pause_button.setText(mIsRunning?
R.string.pause:
R.string.resume);若初始状态为记录则显示暂停,若初始状态为非记录状态则显示开始。
4.2.2复位键
对清零按钮做一个View即:
resetButton=(Button)findViewById(R.id.reset_button);
实现清零的语句很简单,对“开始”键做一个监听,当用户点击“开始”键时,即:
resetButton.setOnClickListener(newView.OnClickListener()[7]
执行一下命令:
{
publicvoidonClick(Viewv)
{
resetValues(true);
}
};
这样记录数据清零的按钮就完成了。
4.2.3设置步长
对于设置步长,首先要获取用户所输入的步长信息:
returnFloat.valueOf(mSettings.getString("step_length","70")
若用户未对步长信息进行编辑,则默认为70.
在DistanceNotifier中使用mStepLength来计算走过的距离:
mDistance=mDistance+(float)(mStepLength/100000.0);
notifyListener();
4.2.4设置体重
对于设置体重,首先要获取用户所输入的体重信息:
returnFloat.valueOf(mSettings.getString("body_weight","50"
若用户未对步长信息进行编辑,则默认为50.
在CaloriesNotifier中使用mBodyWeight来计算用户因运动所消耗的卡路里:
mCalories+=(mBodyWeight*(mIsRunning?
METRIC_RUNNING_FACTOR:
METRIC_WALKING_FACTOR))*mStepLength/100000.0;
notifyListener();
4.2.5历史记录的查看及删除
publicclassView1extendsActivity{//使用ActionBarActivity出现闪退不能运行,可以使用Activity
privateListViewlist;
privateButtonbtnBack,btnForward;
privateintmYear,mMonth,mDay;
privateTextViewtvTitle;
String[]from;
Stringtoday;
int[]to;
int_id;
SimpleCursorAdaptermAdapter;
DataBasedb;
Cursorcur;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.view1);
db=newDataBase(this);
db.CreatTable_amount();
list=(ListView)findViewById(R.id.listView1);
Calendarc=Calendar.getInstance(TimeZone.getTimeZone("GMT+08:
00"));
mYear=c.get(Calendar.YEAR);
mMonth=c.get(Calendar.MONTH)+1;
mDay=c.get(Calendar.DAY_OF_MONTH);
if(mMonth<10)
{today=mYear+"-"+"0"+mMonth;}
else
{today=mYear+"-"+mMonth;}
cur=db.getAmount(today);
from=newString[]{"date","Distance"};
to=newint[]{R.id.textView1,R.id.textView2};
cur=db.getAmount(today);
mAdapter=newSimpleCursorAdapter(this,R.layout.items,cur,from,to);
list.setAdapter(mAdapter);
list.setOnItemLongClickListener(newOnItemLongClickListener(){
@Override
publicbooleanonItemLongClick(AdapterView
>Vparent,android.view.Viewview,
intposition,longid){
//TODOAuto-generatedmethodstub
_id=(int)id;
newAlertDialog.Builder(View1.this).setTitle("提示ʾ").setMessage(
"确定删除该细节?
").setIcon(R.drawable.ic_launcher).setPositiveButton("确定",
newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialog,intwhichButton){
//Log.v("",""+_id);
db.delAmount(_id);
mAdapter.changeCursor(cur);
((SimpleCursorAdapter)mAdapter).notifyDataSetChanged();
finish();
System.out.println("ok");
list.setAdapter(mAdapter);
}
}).setNegativeButton("取消",
newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialog,intwhichButton){
}
}).show();
returnfalse;
}
});
tvTitle=(TextView)findViewById(R.id.tvTitle);
tvTitle.setText(mYear+"-"+mMonth+"-"+"01"+"---"+mYear+"-"+(mMonth+1)+"-"+"01");//
if(mMonth==12)
{
tvTitle.setText(mYear+"-"+mMonth+"-"+"01"+"---"+(mYear+1)+"-"+1+"-"+"01");
}
elseif(mMonth>12)
{
mMonth=1;
mYear=mYear+1;
tvTitle.setText(mYear+"-"+mMonth+"-"+"01"+"---"+mYear+"-"+(mMonth+1)+"-"+"01");
}//
btnBack=(Button)findViewById(R.id.btnBack);
btnForward=(Button)findViewById(R.id.btnForward);
ButtonListenerbuttonlistener=newButtonListener();
btnBack.setOnClickListener(buttonlistener);
btnForward.setOnClickListener(buttonlistener);
}
classButtonListenerimplementsOnClickListener
{
publicvoidonClick(android.view.Viewv)
{
switch(v.getId())
{
caseR.id.btnBack:
leftView();
break;
caseR.id.btnForward:
rightView();
break;
}
}
privatevoidrightView(){
Calendarc=Calendar.getInstance(TimeZone.getTimeZone("GMT+08:
00"));
mMonth++;
tvTitle.setText(mYear+"-"+mMonth+"-"+"01"+"---"+mYear+"-"+(mMonth+1)+"-"+"01");
if(mMonth==12)
{
tvTitle.setText(mYear+"-"+mMonth+"-"+"01"+"---"+(mYear+1)+"-"+1+"-"+"01");
}
elseif(mMonth>12)
{
mMonth=1;
mYear=mYear+1;
tvTitle.setText(mYear+"-"+mMonth+"-"+"01"+"---"+mYear+"-"+(mMonth+1)+"-"+"01");
}
if(mMonth<10)
{today=mYear+"-"+"0"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Android 手机 计步器 设计 实现 专业 工程 综合 报告