智能终端软件开发自主学习报告.docx
《智能终端软件开发自主学习报告.docx》由会员分享,可在线阅读,更多相关《智能终端软件开发自主学习报告.docx(31页珍藏版)》请在冰豆网上搜索。
智能终端软件开发自主学习报告
1引言
随着Android的崛起,智能手机的操作系统绝大数都是Android系统。
Android的成功,并不是什么巧合,Android所获得的成就,有2个重要方面:
1.Android是一款开放源码的操作系统;因此,人人都有可能成为Android的开发人员,这样使得Android的应用丰富多彩。
2.Android注重用户体验;用户体验的提高,使得操作变得更加的简单方便。
手机给我们带来了便利,我们随身带着的手机可以集成许多的功能,其中就能够有日志的功能,因为方便携带所以我们不需要带上那保密性差,有容易遗失的日记本了,我们现在只需要用手机,就能够随时随地的记录下我们容易遗忘的事情,因此,我们设计了这么一款手机日志程序。
本论文所设计与开发出的这款基于Android手机的日志,分析了Android系统的技术原理和实现策略,以更加合理和有效的方式实现了各个功能模块,最后将其有机结合在一起,成为一款实用的日志软件。
本系统包括日志的添加,修改,删除等操作,为了让其更加实用,我们还搭配了闹钟的功能,使得界面简洁清晰,使用方便且人性化。
2安卓的概述
2.1Android简介
Android操作系统最初由AndyRubin开发,最初主要支持手机。
2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。
Android的主要竞争对手是苹果公司的iOS以及RIM的BlackberryOS。
2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。
2011年11月数据,Android占据全球智能手机操作系统市场52.5%的份额,中国市场占有率为58%。
Android是一种以Linux为基础的开放源代码操作系统,主要使用于便携设备。
目前尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。
Android操作系统最初由AndyRubin开发,最初主要支持手机。
2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。
Android的主要竞争对手是苹果公司的iOS以及RIM的BlackberryOS。
2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。
2012年2月数据,Android占据全球智能手机操作系统市场52.5%的份额,中国市场占有率为68.4%。
2.2Android平台特性
1、应用程序框架 支持组件的重用与替换。
2、Dalvik 虚拟机 专为移动设备优化。
3、集成的浏览器 基于开源的WebKit 引擎。
4、优化的图形库 包括定制的2D图形库,3D图形库基于OpenGL ES 1.0 (硬件加速可选)。
5、SQLite 用作结构化的数据存储。
6、多媒体支持 包括常见的格式 (如 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)。
7、GSM 电话技术 (依赖于硬件)。
8、蓝牙Bluetooth, EDGE, 3G, 和 WiFi (依赖于硬件)。
9、照相机,GPS,指南针,和加速度计(accelerometer) (依赖于硬件)。
10、丰富的开发环境 包括设备模拟器,调试工具,内存及性能分析图表,和Eclipse集成开发环境插件。
2.3Android用户界面构建
在Android平台下开发应用软件,最重要的是布局问题。
一个好看而又简洁的界面,是相当重要的,既能提高使用者的体验,又保证应用的高效执行。
Android生成用户界面有三种方式:
xml配置生成、通过用户自己的界面接口生成和直接用代码生成。
对于一个Activity应用来说,android.app.Activity类是一个最基本的功能单元。
一个Activity实例可以做很多的事情,但是它本身无法显示在屏幕上,而是借助于Viewgroup和View,这两个是Android平台上最基本的两个用户界面表达单元。
下面介绍下主要的布局对象:
线性布局(LinearLayout):
以单一方向对其中的显示对象进行排列显示。
如以垂直排列显示,则布局管理器中将只有一列;如以水平排列显示,则布局管理器中将只有一行。
同时,还可以对个别的显示对象设置显示比例[2]。
表格布局(TableLayout):
以拥有任意行列的表格对显示对象进行布局,每个显示对象被分配到各自的单元格之中,但单元格的边框线不可见。
绝对布局(AbsoluteLayout):
允许以坐标的方式,指定显示对象的具体位置,左上角的坐标为(0,0),向下及向右,坐标值变大。
这种布局管理器由于对象的位置固定了,所以在不同的设备上,有可能会出现不一样的显示效果。
相对布局(RelativeLayout):
允许通过指定显示对象相对于其它显示对象或父级对象的相对位置来布局。
一个按钮可以放于另一个按钮的右边,或者可以放在布局管理器的中央。
对于Android应用中的一个屏幕,它的屏幕元素是按层次结构来描述的。
要将一个屏幕元素层次树绑定在一个屏幕上显示,Activity会调用它的setContentView()方法并且传入这个层次树的根节点引用
2.4资源的获取和使用
资源是外部文件(不含代码的文件),它被代码使用并在编译时编入应用程序。
Android支持不同类型的资源文件,包括XML、PNG以及JPEG文件。
它们在运行的时候被解析,XML文件根据描述不同有不同的格式。
源代码以及XML文件将资源打包并编译进二进制文件,这种模式能使得资源更快的被加载。
字符串也同样被压缩成更高效的模式。
由于这些原因,Android平台上可以有不同的资源类型。
Android资源系统能跟踪所有非代码相关的应用程序。
程序开发者可以使用资源类来访问应用程序的资源,资源的实例通常和应用程序联系在一起,可以通过Context.getResources来访问。
应用程序的资源在编译时就被编译到应用程序二进制代码里为了使用某个资源,程序开发者需要将它放在对应的代码目录结构里,然后编译。
作为编译过程的一部分,产生的资源代号可以在源代码里使用,这就可以用编译器来验证程序代码和定义的资源是否相符。
Android的闹钟系统提供了警报和时间设置方面支持,其实现的硬件基础通常是实时时钟设备。
在Linux内核代码中,需要有实时时钟设备驱动程序和Android的Alarm驱动程序。
警报器-实时时钟系统包含了JNI和JAVA层的接口,在JAVA应用程序层可以通过接口控制警报器方面的功能。
3功能设计概述与需求分析
3.1软件功能设计
该系统的设计与实现主要包括以下几个方面的工作:
1.搭建基于Android系统平台的多功能日记本构架,设计包含了写日志,我的日记本,闹钟和闹钟情景模式,四个功能模块的日记本系统体系。
2.对日记本系统四个功能模块逐一论述需求分析,构建每一模块的基本功能和预期产生的效果。
3.采用面向对象的程序设计方法分别实现写日记、查看和修改日志、设定闹钟和修改闹钟选项四个功能模块。
4.分别对四个功能模块进行软硬件测试,在每一模块测试成功的基础上,完善整个日记本系统功能连调。
基于Android系统手机开发的日记本软件界面友好,操作便捷,具有良好的扩展性和可维护性。
经过系统测试,该软件工作安全可靠,可以稳定运行。
3.2数据库设计
该程序数据库是在Android平台上执行Java代码,通过DVM编译来建立的,由于整个SQLite数据库是非可视化操作,因此所有对数据库的操作都是通过执行Java代码实现。
且表的设计也尽量优化,没有错综复杂的关系,每张表都是独立的,不存在任何约束,因此数据库也是独立数据库。
3.3需求分析
日记本是很平常的东西,很多人都有记日记的习惯,有人记账,有人记事、有人记下心情。
随着计算机技术的发展,很多家庭都买了手机,开始上网,开始使用电脑和手机来办公、打字等。
所写现在也有很多的人在使用电脑说说,写博客,发帖子等等,受此启发我就萌生了编写一个日记本,用手机来写日记的想法。
很多事我们不想忘记,于是写进日记本里,多年后翻出来再看看,很是惬意。
大多数人都使用的是纸质的日记本,这中日记很难保存,容易丢失,也容易遭到水浸等物理破坏,这样我们的日记就丢了。
同纸质的日记本相比较,用软件日记本不仅环保,而且安全方便,不怕被别人偷看。
软件日记本可以很方便的携带只要存在手机里面就可以了。
3.4用户分析
这个软件面向的用户是拥有手机的大众,而其具有写日记的习惯的人。
用户使用的软件必须简单容易使用,界面得体,在此基础上尽可能多的提供人性化功能,丰富软件的内涵。
同时软件必须尽量保证不会因用户的不当操作而使用户受到严重的经济、财产、精神损失。
软件必须具有很强的可靠性,不会无故终止运行、死机、退出等。
3.3.1用户要求具备基本功能
a 编写日记:
包括添加日记和取消。
b 管理日记:
包括保存及删除日记、按日期分组日记。
c编辑闹钟:
包括设定闹钟,和删除闹钟
d设置魔石:
包括设定闹钟的提醒方式和删除方式
3.3.2除基本功能外,可另曾特色功能
a 闹钟音乐播放。
b 编辑闹钟提醒方式。
3.5系统体系结构
系统主旨在建立系统的闹钟,日志等,主要有如下几个核心功能模块
4功能模块介绍
4.1欢迎界面
添加联系人整个布局的主体采用默认的LinearLayout来呈现,采用TableRow的好处是对齐很方便,为了整体的美观,大多数情况都是用的Imageview和Imagebutton控件显示,如下图的代码和图4-1所示。
android:
layout_marginTop="50dp"
android:
layout_marginLeft="19dp"
android:
layout_height="wrap_content"
android:
layout_width="wrap_content"
android:
src="@drawable/title"
android:
contentDescription="@string/hello_world"
/>
android:
id="@+id/picmak"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_marginTop="130dp"
android:
layout_marginLeft="150dp"
android:
src="@drawable/p6"
android:
background="#00000000"
android:
contentDescription="@string/hello_world"
图4-1
4.2主界面
主界面里面就是通向其他界面的四个按钮,因为总体界面不是很大,所以我尝试使用了HorizontalScrollView控件,多数的代码都是由系统自动生成,我的工作就是给四个控件添加监听事件,如图4-2-1,4-2-2所示。
图4-2-1
图4-2-2
4.3添加日记模块
点开写日记,即可添加日记,因为日记需要保存信息,所以需要吧信息都保存在数据库中,我们首先要创建一个数据库,新建MyLiteHelper.java,然后创建一个数据库,数据库文件名称为my_note.db,因为Android的数据库是不是可视的,所以尽可能的把数据库能够书写的简单一点,部分代码如下。
效果图如图4-3
privateSQLiteDatabasedb;
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_write);
imgbut1=(ImageButton)findViewById(R.id.imgbut1);
imgbut2=(ImageButton)findViewById(R.id.imgbut2);
houtui=(ImageButton)findViewById(R.id.houtui);
w_tit=(EditText)findViewById(R.id.w_tit);
w_cont=(EditText)findViewById(R.id.w_cont);
db=newMyLiteHelper(this).getWritableDatabase();
图4-3
4.4编辑日志
日志添加过后肯定需要有所改动,所以需要有添加、删除、修改的选项,而日志内容就需要接收之前存储的数据库。
读取接收的部分代码如下。
效果图如图4-4
接收日志
Intentintent=getIntent();
id=intent.getIntExtra("com.chao.note.id",1);
Stringtit=intent.getStringExtra("com.chao.note.tit");
Stringcont=intent.getStringExtra("com.chao.note.cont");
Stringdatetime=intent.getStringExtra("com.chao.note.datetime");
修改或者删除日志
switch(arg0.getId()){
caseR.id.imgbut1_1:
{
Stringtit=edt_tit.getText().toString().trim();
Stringcont=edt_cont.getText().toString().trim();
Stringsql="updatemy_notesettitle='"+tit+"',content='"+cont+"'whereid='"+id+"'";
db.execSQL(sql);
Toast.makeText(ShowOneActivity.this,"保存成功..",Toast.LENGTH_LONG).show();
finish();
break;
}
caseR.id.imgbut2_1:
{
edt_tit.setText("");
edt_cont.setText("");
break;
}
caseR.id.imgbut3_1:
{
AlertDialog.Builderbuilder=newBuilder(ShowOneActivity.this);
builder.setTitle("删除");
builder.setIcon(R.drawable.t_sc);
builder.setMessage("是否删除");
builder.setPositiveButton("ok",newDialogInterface.OnClickListener(){
@Override
publicvoidonClick(DialogInterfacedialog,intwhich){
//TODOAuto-generatedmethodstub
Stringsql1="deletefrommy_notewhereid="+id;
db.execSQL(sql1);
Toast.makeText(ShowOneActivity.this,"删除成功",Toast.LENGTH_LONG).show();
finish();
}
});
builder.setNegativeButton("否",null);
builder.create().show();
break;
}
caseR.id.houtui_1:
{
finish();
break;
}
图4-4
4.5添加设置闹钟
闹钟与闹钟的情景模式是相互关联的,添加闹钟后可以再情景模式当中或者是闹钟设置当中选择提醒的方式,部分情景模式设置的代码如下,效果图如图4-5-1和4-5-2所示。
hours=0;
minutes=0;
c=Calendar.getInstance();
intent=getIntent();
isnew=intent.getIntExtra("MY_ALARM_TYPE",2);//2表示新的,1表示旧的
type="常规模式";
if(isnew==1){
hours=intent.getIntExtra("hours",0);
minutes=intent.getIntExtra("minute",0);
c.set(Calendar.HOUR_OF_DAY,hours);
c.set(Calendar.MINUTE,minutes);
num=intent.getIntExtra("num",0);
type=intent.getStringExtra("type");
id=intent.getIntExtra("id",0);
tv.setText("你选定的时间是"+hours+"时"+minutes+"分"+id);
if(type.equals("常规模式")){
radioone.setChecked(true);
my_check=1;
}elseif(type.equals("震动模式")){
radiotwo.setChecked(true);
my_check=2;
}elseif(type.equals("静音模式")){
radiothree.setChecked(true);
my_check=3;
}
}
图4-5-1
图4-5-2
自学心得
安卓应用程序设计中,我遇到了很多的问题,但同时我也收获很多,设计开发过程初期,我一直都不清楚我要做一个什么样子的程序,所以一开始都是漫无目的的去做着登录界面,最近的几周都有考试,设计不是没有进展,只是比较缓慢,后来我发现我总是莫名的忘记一些事情,真巧最近有安卓程序设计,想着想着我就开始着手制作起日志和闹钟的程序了。
但是,刚开始并不能预测难度,跟着书本我学习了许多控件的用法,先实现基本的逻辑框架,和界面框架,然后在此基础上进一步完善丰富,设计制作的过程中很多的函数、属性、成员名都是英文的,甚至连应用软件Eclipse也只有英文版的,大感头疼的我只能自己去翻英汉字典,或者网上查找。
首先遇到的问题便是事件监听,我之前虽然做过类似的JAVA课程设计,但我并没有好好的掌握,自己的程序完成后产生大量的错误,最后还是迫不得已去使用网上已有的源代码和脚本,经过几番的调试,我终于算是完成第一个界面。
一开始我用button做的界面,因为方便使用,很好的布局,但是每当扩充一种功能时,为了使界面整体美观,我换成了imagebutton,界面变得简单,使用方便。
这次的自主学习中我学会了设置安装环境,也基本掌握了安卓的开发方法及基本流程。
在本次开发过程中,安卓的设计中还需要用到的XML和SQL的语言,主要用到的知识有Activity的使用,在程序中用到了多个窗口,因而需创建多个Activity。
主要是用于多个Activity之间的跳转。
在开发期间,我学会了有目的的去学习一些将要用到的东西,仔细地考虑工作流程的规律和步骤,充分利用手中的开发工具,利用其所具备的功能,尽量使自己的开发在代码上实现少而精确、让用户能够尽量简单地进行操作。
但是在检测过程中,还是出现了很多的不足之处,这些都是要在今后的工作中需要努力改进和完善的。
在这次程序开发设计中,我也难免会遇到不少困难,这主要是由于我对所用的开发环境并不是很熟悉,开发软件的经验不足。
安卓开发用的语言是java,这次开发对我来说可以算是一次锻炼,整个开发过程并虽然不是很顺利,却使我从中充分体会到学习的快乐,开发的程序也在一步步得到完善。
虽然我只能完成一些基本的功能,好多设想都未实现,但是当我第一次在我的手机上用到了我自己开发的程序,我的顿时信心大增,整个学习的过程变得让人满足和愉悦。
参考文献
[1].王保罗.Java面向对象程序设计[M].北京:
清华大学出版社,2003年
[2]杜波依斯.MySQL技术内幕[M].第4版.人民邮电出版社,2011年
[3]熊刚.基于.Android的智能手机的设计与实现[D].武汉理工大学,2010
[4]靳岩,姚尚朗.Android发入门与实践[D].人民邮电出版补,2009
附录:
程序
packagecom.chao.adapter;
importjava.util.List;
importcom.chao.model.MyAlarm;
importcom.chao.note.R;
importandroid.content.Context;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.BaseAdapter;
importandroid.widget.TextView;
publicclassMyAlarmAdapterextendsBaseAdapter{
privateContextcontext;
privateListdata;
publicMyAlarmAdapter(Contextcontext,Listdata){
this.context=context;
this.data=data;
}
@Override
publicintgetCount(){
//TODOAuto-generatedmethodstub
returndata.size();
}
@Override
publicObjectgetItem(intarg0){
//TODOAuto-generatedmethodstub
returndata.get(arg0);
}
@Override
publiclonggetItemId(intarg0){
//TODOAuto-generatedmethodstub
returnarg0;
}
@Override
publicViewgetVie