android课程学习心得(11篇)
1.android课程学习心得 篇一
即 使你的应用程序是快速且响应灵敏的,但一些设计仍然会给用户造成问题——与其它应用程序或对话框未事先计划的交互,意外的数据丢失,意料之外的阻塞等等。避免这些问题,有助于理解应用程序运行的上下文和系统的交互过程,而这些又正影响着你的应用程序。简而言之,你应该竭尽全力去开发一个与系统和其它应用程 序流畅交互的应用程序。
一 个常见的流畅问题是,一个应用程序的后台处理——例如,一个 Service或者
BroadcastReceiver——弹出一个对话框来响应一些事件。这可能看起来没啥大碍,尤其是你在模拟器上单独地构建和测试你 的应用程序的时候。然而,当你的应用程序运行在真机上时,有可能你的应用程序在没有获得用户焦点时后台处理显示了一个对话框。因此,可能会出现在活跃的应 用程序后方显示了你的应用程序的对话框,或者从当前应用程序夺取焦点显示了一个对话框,而不管当前用户正在做什么(例如,正在打电话)。那种行为,对应用 程序或用户来说,就不应该出现。
为了避免这些问题,你的应用程序应该使用合适的系统资源来通知用户——Notification类。使用Notification,你的应用程序可以在状态栏显示一个 icon来通知用户已经发生的事情,而不是夺取焦点和打断用户。
另 一个流畅问题的例子是未能正确实现Activity的 onPause()和其它生命周期方法而造成意外丢失了状态或用户数据。又或者,如果你的应用程序想暴露数据给其它应用程序使用,你应该通过 ContentProvider来暴露,而不是(举例)通过一个可读的原始文件或数据库来实现。
这 些例子的共同点是它们都应该与系统和其它应用程序协作好。Android系统设计时,就把应用程序看作是一堆松散耦合的组件,而不是一堆黑盒代码。作为开 发者来说,允许我们把整个系统看作是更大的组件集合。这有益于我们可以与其它应用程序进行清晰无缝的集成,因此,作为回报,我们应该更好的设计我们的代 码。
下面将讨论常见的流畅问题以及如何避免它们:
一 定要记住Android是一个移动平台。可以显而易见地说,其它Activity(例如,“Incoming Phone Call”应用程序)可能会在任何时候弹出来遮盖你的Activity,记住这个事实很重要。因为这个过程将触发 onSaveInstanceState()和 onPause()方法,并可能导致你的应用程序
被杀死。
如 果用户在你的应用程序中正在编辑数据时,其它 Activity出现了,这时,你的应用程序被杀死时可能丢失那些数据。当然了,除非你事先保存了正在进行的工作。“Android方式”是这样做的:能 接收和编辑用户输入的 Android应用程序应该重写 onSaveInstanceState()方法,并以恰当的方式保存它们的状态。当用户重新访问应用程序时,她能得到她的数据。进行这种处理方式最经典的例子是 mail应用程序。如果用户正在输入 email,这时其它 Activity启动了,mail应用程序应该把正在编辑的email以草稿的方式保存起来。
如果你不想穿着内衣在大街上溜达的话,你的数据也不应该这样。尽管可能存在暴露应用程序的某种形式给其它应用程序,但这通常不是最好的主意。暴露原始数据,要求其它应用程序能够理解你的数据的格式;如果你变更了格式,那么,你将破坏那些没有进行同步更新的应用程序。
“Android 方式”是创建一个 ContentProvider,以一种清晰的、深思熟虑的和可维护的API方式暴露你的数据给其它应用程序。使用 ContentProvider,就好像是插入Java接口来分离和组装两片高耦合的代码。这意味着你可以修改数据的内部格式,而不用修改由 ContentProvider暴露的接口,这样,也不会影响其它应用程序。
如果用户正在运行一个应用程序(例如,Phone程序),断定对用户操作的目的才是安全的。这也就是为什么必须避免创建Activity,而是直接在当前的 Activity中响应用户的输入。那 就是说,不要在 BroadcastReceiver或在后台运行的 Service中调用 callActivity()。这么做会中断当前运行的应用程序,并导致用户恼怒。也许更糟糕的是,你的 Activity可能成为“按键强盗”,窃取了用户要提供给前一个 Activity的输入。视乎你的应用程序所做的事情,这可能是个坏消息。
不 选择在后台直接创建 Activity UI,取而代之的是,应该使用NotificationManager来设置 Notification。它们会出现在状态栏,并且用户可以在他空闲的时候点击它们,来查看你的应用程序向他显示了什么。(注意,如果你的 Activity已经在前台了,以上将不适用:这时,对于用户的输入,用户期望的是看到下一个 Activity来响应)
如果你的应用程序需要执行一些昂贵或耗时的计算的话,你应该尽可能地将它挪到线程里。这将阻止向用户显示可怕的“Application Not Responding”对话框,如果不这样做,最终的结果会导致你的应用程序完全终止。
一 般情况下,Activity中的所有代码,包括它的 View,都运行在相同的线程里。在这个线程里,还需要处理UI事件。例如,当用户按下一个按键,一个 key-down事件就会添加到 Activity的主线程队列里。事件处理系统需要很快让这个事件出列并得到处理;如果没有,系统数秒后会认为应用程序已经挂起并为用户提供杀死应用程序 的机会。
如果有耗时的代码,内联在Activity上运行也就是运行在事件处理线程里,这在很大程度上阻塞了事件处理。这会延迟输入处理,并导致ANR对话框。为了避免这个,把你的计算移到线程里。
任 何值得使用的应用程序都可能有几个不同的屏幕。当设计UI屏幕时,请一定要使用多个Activity对象实例。依赖于你的开发背景,你可能理解 Activity类似于 Java Applet,它是你应用程序的入口点。然而,那并不精确:Applet子类是一个 Java Applet的单一入口点,而一个Activity应该看作是你的应用程序多个潜在入口点之一。你的“main”Activity和其它之间的唯一不同点 是“main”Activity正巧是在AndroidManifest.xml文件中唯一对“android.intent.action.MAIN”动作感兴趣的Activity。因此,当设计你的应用程序的时候,把你的应用程序看作是Activity对象的 集合。从长远来看,这会使得你的代码更加方便维护。
当 谈到 UI观感时,巧妙地交融非常重要。用户在使用与自己期望相反的 UI的应用程序时,会产生不愉快的感觉。当设计你的 UI时,你应该尽量避免太多自己的主题。相反的,使用同一个主题。你可以重写或扩展你需要的主题部分,但至少在与其它应用程序相同的 UI基础上开始。
不 同的 Android设备可能支持不同的屏幕分辨率。甚至一些可以自己变更分辨率,例如,切换到风景模式。确保你的布局和图片能足够灵活地在不同的设备屏幕上正 常显示。幸运的是,这很容易做到。简而言之,你需要做的是为主要分辨率提供不同版本的作品,然后为不同的尺寸设计你的布局。(例如,避免使用硬编码位置而 使用相对布局。)如果那样做的话,系统会处理剩下的部分,而且你的应用程序在任何设备上都看起来很棒。
Android设备会有多种网络连接选项。所有的都提供数据访问,但之间肯定有更快的。其中,速度最慢的是GPRS,GSM网络的非 3G数据服务。即使具备 3G能力的设备在非3G的网络上也会花费很多的时间,所以,网络很慢仍然是一个长期存在的事实。
这 就是为什么你应该按照最小化的网络访问和带宽来编写你的代码。你不能假设网络是快速的,所以,你应该总是计划它是慢的。如果你的用户碰巧在一个快速的网络 上,那很好——他们的用户体验会提升。你要避免相反的情形:在不同的地点和不同时间,应用程序有时可用,有时慢得令人抓狂,这样的程序可能不会受欢迎。
还 有一个潜在的地方是,如果你正在使用模拟器,那么你很容易受它迷糊,因为模拟器使用电脑的网络连接。这比手机网络快很多,所以,你需要修改模拟器设定来模 拟较低的网络速度。你可以在 Eclipse中做到这点,在启动选项的模拟器设置页里设置或者在启动模拟器时通过命令行选项设置。
Android 可以支持多种外观形状。也就是说,一些Android设备拥有全“QWERTY”键盘,而其它可能会有40键、12键或其它键盘设置。同样的,一些设备可 能有触摸屏,但一些也会没有。当创建你的应用程序的时候,记住这一点。不要假定特定的键盘布局——除非你真的想限定你的应用程序只运行在某些设备上。
如 果移动设备经常插在墙上,那么,它也就不是很“移动”。移动设备是电池供电的,如果我们能让每次充电的电池使用得更持久一些,那么每个人都会更加开心—— 尤其是用户。
其中两大耗电硬件是处理器和无线;这也就是我们为什么要写尽可能少做工作、尽可能少去使用网络的应用程序的重要原因。
如 何让你的应用程序最小化的占用处理器,归根结底还是要写高效代码。为了减少无线的电量消耗,确保对错误条件进行正确的处理,并只获取你要的东西。例如,如 果某一个网络操作失败了,不要不断地进行重试。如果失败了一次,有可能是用户不受欢迎,因此,如果你再以正确的方式操作,有可能还会失败;所有你做的都是 在浪费电池。
用户是相当聪明的:如果你的程序高耗电,他们是一定会发现的。到那个时点,你唯一可以确定的是,你的程序将很快被卸载掉。
2.android课程学习心得 篇二
移动学习是远程教育发展的新阶段,是传统教育的重要外延及有益补充,并因其具有“Anyone Anytime Anywhere Anystyle”自由式学习特征,可以在广阔范围内有效地满足人们日益增长的学习需求,缓解当前传统教育的教学压力。
针对高校内师生搭建的高校校园通移动学习平台,即可为老师及学生在教与学的过程中搭建起线上线下顺畅沟通的渠道和桥梁。移动学习平台的建立可使学生随时获取学习资料,进入学习状态,同时还能够利用互联网的共享资源条件进一步扩展学习范围。同时,在学习中产生的疑问将能够利用便捷直接的方式获取相关教师的解答。另外,教师就可以利用线上线下开设业余课程,从而对教学进行改革,达到按需教学的理想作用和最佳效果。
1 系统架构
高校校园通移动学习平台分为PC管理端和移动学习端。其中,PC管理端主要是由管理员实行后台管理,教师进行信息发布。移动学习端则主要是面对学生,可通过wifi或移动基站进入平台学习。故探索综合平台的各类现实需求可得以下移动学习平台结构图,如图1所示。
特别地,研究可知移动学习端的用户主要是教师和学生。学生在本移动平台学习不需要进行注册,而是只需在移动终端登录页面并输入学号、密码,匹配学生库,由此即实现了学员用户的一次登录。
在此基础上,移动应用是否成功需要提供一个突出的用户体验,因此在进行系统设计时,用户体验随即成为需要优先实现的主题元素。快速、响应、无缝是开发用户体验必须具备的3个重要特征。具体来说,就是运行速度快,反应敏捷和良好的交互。
综合以上论述可得,研究中移动教学平台客户端主要功能模块的分析描述可如表1所示。
2 系统设计实现
2.1 实现技术
在Android的系统中,研究所涉及的布局文件主要包括17个,可分述如下:sing.xml(登录)mainactivity.xml(主界面)、myapp.xml(个人应用)、myclass.xml(我的课堂)、worknotic.xml(作业通知)、achievinquiry.xml(成绩查询)、photo.xml(拍一拍)、scann.xml(扫一扫)、shake.xml(摇一摇)、stuapp.xml(学校应用)、question.xml(题库)、lineclass.xml(在线课堂)、poster.xml(学院海报)、radio.xml(学院广播站)、yuanchat.xml(院信)、friendcircle.xml(朋友圈)、setting.xml(设置)。
登录界面的布局效果如图2所示,布局结构则如图3所示。
作为整个应用程序的主窗体,主界面贯穿于整个应用程序,因此在建立页面布局时,需将其单独作为一个页面实现整合处理,而将其他应用界面嵌入主界面当中,而点击不同按钮时只是切换各级嵌入界面,而无需改变主界面,从而降低了程序加载过程中的内存负荷,提高了运行效率。主界面如图4所示,子界面以我的课堂为例,如图5所示。
2.2 实现代码
2.2.1 将“个人应用”嵌入主界面的设计实现
将“个人应用”嵌入到主界面中的代码如下:
程序中,在主界面的空白区域添加一个Linear Layout,ID号为content。在Main Activity.java中创建2个变量分别为:Linear Layout变量content,View变量my App View。
再利用语句content=(Linear Layout)find View By Id(R.id.content);获取到主界面中的Linear Layout布局组件。建立Layout Inflater类创建factor对象并利用对象的inflate获取到布局文件myclass.xml。而后,又使用Linear Layout类中的add View方法将最近获取到的布局文件myapp加载进来,完成整个界面的建立。最终实现效果如图6所示。
2.2.2 点击“个人应用”时的设计实现
不仅如此,在“个人应用”界面嵌入到主界面的同时,还需要在“个人应用”对应的按键上添加事件监听,即:当“个人应用”标签被点击时需要进行页面加载,同样,当点击“学校应用”标签时,也需要进行加载stuapp.xml页面。“学校应用”界面与“个人应用界面”的加载方法类似,在此不再赘述。至此,给出共享代码实现,具体可做如下呈现。
2.2.3“个人应用”页面跳转和Activity生命周期分析
“个人应用”界面的下一级界面切换采用直接页面跳转的方法。由于直接跳转到另一全新的页面,需要调用一个新的on Create方法,因此需要创建一个Activity新类来装载这个方法。又因为创建了新的Activity类需要在Android Manifest.xml文件中对其进行注册,实现代码可表述为:
<activity android:name="包名.Activity文件名"/>
Activity生命周期包括7个方法,分别表述为:on Create()、on Start()、onResume()、on Pause()、on Stop()、onRestart()、on Destroy(),这些方法的启动过程是:当一个Activity启动时会执行on Create()方法,如果同一Activity在启动之后是处于可见状态,on Start()方法就会发生调用。当前处于可见状态的Activity在获得焦点时便调用onResume()方法。通常情况下,on Create()方法、on Start()方法、onResume()方法即会在一个Activity启动之后依次连续进入调用。而当Activity被部分遮挡时,则会调用on Pause()方法,使其失去焦点处于不可编辑状态。如果另一个Activity启动而将当前的Activity完全遮挡时,就会在调用on Pause()方法之后,还会进一步调用on Stop()方法。另一个Activity也如上将依次调用on Create()方法、on Start()方法和onResume()方法。这里需要注意的是第一个Activity的on Stop()方法是在第二个Activity的3个方法调用完成之后才调用的。在此之后,当第2个Activity被关闭时就会顺序调用on Pause()方法、on Stop()方法和on Destroy()方法,且将第2个Activity销毁,而相应地,第一个Activity则将分别先后调用onRestart()、on Start()方法和onResume()方法恢复第一个Activity的活动状态。
3 结束语
移动学习已经日渐成为当今人们生活中的重要学习模式和学习手段,基于Android系统的高校校园通作为一种移动学习的工具可将零散时间有效利用起来进行拓展学习,不仅符合了现代人的快节奏紧张生活,而且对当下创建“学习型社会”具有良好有益的现实意义和应用价值。
摘要:移动学习已经越来越成为人们生活中的一个重要的学习手段,基于Android系统的高校校园通作为一种移动学习的工具应运而生。移动端可以实现用户登录、个人应用、学院应用、及其它等功能。利用Android布局技术实现各个模块的页面搭建。
关键词:Android,移动学习,布局
参考文献
[1]聂芬,王运生.基于Linear Layou的多级嵌套界面设计[J].智能计算机与应用,2014,4(1):72-74.
3.android课程学习心得 篇三
摘 要:随着智能手机的快速普及,智能手机操作系统市场风生水起。为了方便在校学生可以随时随地查看课程,一种高效的办法就是将课程表做成应用程序拓展到用户的终端设备上,并且提供一些辅助功能。因此,智能手机应用软件及其需要的服务将有广阔的开发前景。
关键词:Android;智能手机平台;课程表;开源
中图分类号:TP393 文献标志码:A 文章编号:1673-8454(2014)06-0082-03
一、引言
在智能手机系统群雄纷争的时候,2008年Google推出了一款名为Android的开源智能手机操作系统,它采用Linux内核,开放手机联盟(OHA)成员可以任意使用和修改SDK包,系统开源性使其具有良好的拓展性。这款软件包括了操作系统、用户界面和应用程序,即智能手机工作所需要的全部软件。Android的最大特点是其开放性的体系架构,不仅具有非常好的开发、调试环境,而且还支持各种可扩展的用户体验,包括丰富的图像组件、多媒体支持功能及其强大的浏览器。因此,对于软件从业人员来说,Android平台具有无限的吸引力。
本文在分析讨论Android手机软件开发技术原理的基础上,设计并实现了能为用户提供更好的基于Android平台的课程表。
二、系统需求分析
本应用是一款简单的Android课程表,首先课表支持查看课程的功能,因为数据比较小,采用了XML存储模式。其次,课表具有修改课程的功能,便于课程改变的应对,以及清空课表,为循环使用提供方便。在Title项设计了点击查询当日天气的功能。由此可以得到功能图1,程序流程图2。
三、系统功能模块概述
系统分为4个功能:
1.显示主界面
主界面显示各个按钮,以及动态显示本周的课程,主界面将Title隐藏了起来,取而代之的是自己设计的Title,将他们整合起来。另外,主界面要负责将XML数据调入内存中。
2.修改课程功能
修改课程功能,通过用户点击课程后,弹出一个Dilog,用户可以在Dilog中修改本课程的上课时间、代课老师、课程名称以及备注信息。然后将其重新回写到XML文件中,方便下次启动时,课程被永久修改。
3.清空课表功能
清空课表功能,当用户点击了清空课表,将清除所有科目的上课信息属性,课表将被置空。用户可以重新编辑课表。
4.天气查询功能
天气查询功能放置在Title项中,节省主界面的空间,Title和主界面搭配在一起,设置按钮监听,当Title按钮被点击时,从网上获取今日的天气情况,并显示在Title栏中。
四、实现技术及工具
Android提供了免费且跨平台的整合开发环境。采用JAVA语言结合Android编程的规则来编写程序。开发Android应用,需要以下硬件及软件支持:
1.操作系统。Windows XP ,Mac OS X(一个基于UNIX核心的系统)和Linux三种方式,本文使用了Windows XP的操作系统来开发。
2.JDK 5 或者 5以上版本。JDK是JAVA的开发环境,必须有了JAVA的开发环境才能开发JAVA程序。这里采用了JDK 7这个版本。
3.Eclipse IDE ,一个多用途的开发工具平台。Eclipse功能十分强大,可搭载其他扩成套件来开发其他项目,如网站开发、ERP开发等。Eclipse版本采用了3.7.0版本。
4.ADT, 一款基于Eclipse的扩充套件。
5.Android SDK,Android程序开发套件,包含了Android手机的模拟器,有了它你就可以在虚拟机中查看调试程序,方便很多。
五、应用程序设计
1.数据存储结构设计
数据采用了面向对象的思想去存储数据,因为数据量比较小,采用了XML文件来存储数据。数据以day标签为每一个数据对象,每一个day标签有多个属性,用来记录数据。数据的属性有Teacher、startTime、endTime、index、weekday、valuetext、classname。当程序启动时,把属性封装成对象,完成操作。
2.主视图设计
Android代码的编写,首先编写主界面的布局文件,每一个Activity文件会对应一个Layout的布局文件,由于在Android中表格布局无法分列,布局起来十分困难,而线性布局也可以做成表格,所以,最终选择了用线性布局来布局主视图。布局分为两大块,在一个总线性布局中首先套用了两个小的线性布局,如图3所示。
左侧的小线性布局放置不同的星期按钮,通过点击按钮来修改右边布局中对应星期的课程。右边的布局中,套用一个表格布局来约束各空间的比例,分出来每一行来存放和显示不同的课程、时间信息。再配以背景的美化,预期效果与最终效果对比如图4所示。
至此,主视图的设计完成,再在Activity中配置相应按钮的动作即可。在主视图创建时,程序读取xml数据载入视图中对应的控件,点击左侧的按钮会改变右侧控件的属性,从而查看每天的课程。
3.修改功能设计
修改功能设计时,需要另起一个Activity,与之对应需要另外建立一个Layout的布局文件,这里采用了Dilog的窗口。Activity的相互启动,需要用到Intent(意图)模式,意图中可以存放需要传递的参数。当点击要修改的课程时,程序会触发动作,来生成一个Dilog完成修改操作。根据要修改的属性,Dilog也采用了线性布局,其中包含开始时间、结束时间、课程名称、教师姓名,以及这节课需要的一些备注信息等属性。除了两个时间以外,其他的属性均使用了文本编辑条,而开始时间和结束时间,为了得到更好的用户体验采用了Android提供的Timepicker控件,它是一个时间选择的控件。当控件的时间发生改变,它会调用相应的OnTimeChangedListener()函数,在这里可以接收得到时间参数,并做相应的处理。endprint
4.天气查询功能设计
天气查询功能,为了节约主界面的空间,将其放在自定义的Title中。自定义的Title含有3个控件,一个用于显示接收的天气信息,一个是Spinner控件,用于选择需要查询的城市,以及一个确定按钮。需要注意的是,Title无法和主界面的线程跑在一起,必须要新起一个线程来处理数据,也就是说,整个应用启动的时候,有2个线程同时在跑,一个是主界面的线程,一个是Title线程用来监听是否触发了Title的操作。应用程序的界面是由2个界面构成。而线程之间传数据,也必须用一定的格式来传,Title线程的数据,在主线程中无法直接调用,必须用特定的方式获取。Spinner空间类似于一个listview控件,不同的是,它将弹出一个Dilog用来选取对应的Item。
整个Title的显示效果如图5所示。
图6是点击查询天气按钮后显示的效果。
数据取自www.webxml.com.cn网站,这个网站免费提供一些信息查询的功能,返回的方式都以XML文件的格式返回,接收到返回文件后,只需自己解析读取所需内容即可。
六、应用程序测试
1.视图功能测试
测试环境首先在搭建环境中的虚拟机进行测试,所用虚拟机版本为API 15,即Android 4.0.3的版本,屏幕尺寸为QVGA。测试主视图整体显示效果正常;点击不同星期,显示不同课程,显示正常;点击Title可以切换不同的城市查询天气,显示正常。
2.改课及清空课表功能测试
修改课程功能测试,显示效果正常;测试清空课表功能,课表已被清空成功,功能测试正常。
3.实体机测试
实体机测试选用了两部不同品牌的手机,分别为摩托罗拉ME525,操作系统为Android 4.0,屏幕尺寸3.7英寸,像素为854 x480;和联想A790e,操作系统为Android 2.3.0,屏幕尺寸4英寸,像素800 x 480。经过多次实体机测试,显示功能正常,修改清空功能正常,查询天气功能正常,无发现BUG点。具体如图7所示。
七、结束语
随着更多大规模的公司加入Android市场,应用程序会越来越多,涉及方方面面,这样势必会造成应用程序的逐渐饱和。在这种情况下,应用程序会更多的将目光放在用户体验上,一款应用程序的大面积普及,势必建立在良好的用户体验上。
简洁、易懂、方便操作将会提升应用程序的普及率。本文介绍的Android移动课程表还有许多可扩展功能,它可以和学校教务处结合在一起,从而拓展出更多的实用功能,例如查看喜爱教师的课程,从而可以自由的安排上课时间,查询同学上课安排等等一系列更加生活化的功能。
通过上述Android应用程序的编写,可以切身了解Android开发的各种结构步骤和Android的系统架构模式,从而对Android的软件开发得出如下收获:
Android应用程序开发十分方便易学,在开源的基础上,设计者有了天马行空的设计方式,不会拘泥于固定模式的开发,有助于语言的进步。Android提供的丰富的API使得开发者开发应用程序不用再考虑下层业务,开发起来高效快捷。
Android 应用程序的开发对于有编程经验的人来说十分易懂,从而带动了开发市场的活跃。加之其跨平台的兼容性,开发的便捷性,大大降低了程序对开发人员人数的依赖性,能够节省大量的成本。
而且,Android开发的应用安装在独立设备之上,降低了像Web这样的多设备连接处理时产生错误的可能性,避免了许多不必要的麻烦。多设备连接更多的会出现预测不到的意外情况,而独立设备方便携带,不会产生多设备连接时的信号冲突。搭配更新周期短的硬件设备,Android应用将会占据市场的核心地位。
参考文献:
[1]赵朋飞.智能手机操作系统Google Android分析[J].科技视界,2011(8).
[2]刘平.Android手机访问服务器的一种数据交互方法[J].电子设计工程,2010(9):96-102.
[3]李佐彬等.Android开发入门与实战体验(附光盘1张)[M].北京:机械工业出版社,2010.
[4]韩超,梁泉.Android系统原理及开发要点详解[M].北京:电子工业出版社,2011.
4.Android 课程设计报告 篇四
课程名称: 嵌入式技术课程设计 设计题目: 基于Android系统的小查询工具 学 院: 信息工程与自动化学院 专 业: 计算机科学与技术 年 级: 2010级 学生姓名: 指导教师: 日 期: 2013/7/8
教 务 处 制
课 程 设 计 任 务 书
信息工程与自动化 学院 计算机科学与技术 专业 2010 年级 学生姓名:
课程设计题目: 基于Android系统的小查询工具 课程设计主要内容:
通过本课程设计,使学生巩固软件工程的基本概念、原理,熟悉安卓应用开发环境和技术,学会完成一个移动终端应用软件的分析、设计、编码测试和安装,将理论与实际相结合,强化学生的项目开发和团队意识,提高学生分析能力和创新能力
基本理论
1、Android系统的开发方法及基本原理
2、JavaEE应用程序设计开发技术 实验方法与基本要求
要求学生掌握Windows环境下Android系统开发的一般方法,AndroidSdk 集成开发环境的构建及JavaEE应用程序的开发。整个设计过程必须由学生自己独立完成,课程设计按二人一组,分组进行全过程的设计。
设计内容
1、Windows环境下构建Android系统的开发环境
2、基于Android模拟手机,设计手机应用程序
3、将程序下载的Android手机上应用
设 计 指 导 教 师(签字): 教学基层组织负责人(签字):
年 月 日
目录
一、课程设计的目的及要求...................................3 1.1 课程设计的目的.......................................3 1.2 课程设计要求………………………………………………………………………3
二、Android应用程序开发背景....................................................................3 2.1开发背景...............................................3 2.2开发环境...............................................4
三、Android应用程序开发环境搭建............................5 3.1所需软件的下载…………………………………………………………………… 5 3.2相应软件的安装.........................................5
四、“小查询工具”的设计与实现„„„„„„„„„„„„„„„10 1.总体设计„„„„„„„„„„„„„„„„„„„„„„„ 10 1)界面设计„„„„„„„„„„„„„„„„„„„„„10 2)功能设计„„„„„„„„„„„„„„„„„„„„„12 2.详细设计„„„„„„„„„„„„„„„„„„„„„„„ 12 1)模块设计„„„„„„„„„„„„„„„„„„„„„12 2)编码实现„„„„„„„„„„„„„„„„„„„„„12 3.手机上运行截图„„„„„„„„„„„„„„„„„„„„ 14
五、总结与体会„„„„„„„„„„„„„„„„„„„„„„„16
基于Android系统的小查询工具设计
一、课程设计的目的及要求 1.1 课程设计的目的
1)复习、巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握;搭建一个完整的安卓开发环境。
2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力,提高学生适应实际,实践编程的能力;
3)培养学生在项目开发中团队合作精神,创新意识及能力。
1.2 课程设计要求
1)通过Eclipse搭建一个完整的安卓开发环境。
2)在安卓开发环境上编写一个简单的安卓软件,并且能够在手机上运行。
二、Android应用程序开发背景 2.1开发背景
1.智能手机的市场
(1)功能多样化的智能手机挑战全球PC出货量
移动互联网时代的来临,直接促进了搭载智能操作系统、具有强大扩展性的智能手机、平板电脑等移动终端产业的蓬勃发展。来自美国最大的风险投资机构KPCB的数据显示,全球智能手机出货量正在以远高于台式电脑、笔记本电脑出货量的速度快速增长,该机构预计2013年全球智能手机出货量将达到4.13亿,超过台式电脑与笔记本电脑出货量的总和。
(2)智能手机的用户使用数量正在高速增长。据市场调研机构Gartner信息,2011年全球智能手机的总出货量将会达到4.68亿部,相比2010年实现了57.7%的增长,而谷歌Android操作系统将会在今年之内成为全球最大的智能手机操作系统。另外,全球市场调研机构IDC预计未来5年中国手机市场上,智能手机替代传统功能手机的趋势将日益明显,未来5年中国智能手机市场复合增长率将达到34.1%,人们对IT设备智能化的向往是这一增长率能够实现的主要因素,并且与其他国家相比,中国智
在path变量(已存在不用新建)添加变量值:%JAVA_HOME%bin;%JAVA_HOME%jrebin(注意变量值之间用“;”隔开)
检验环境变量是否配置成功:“开始”-->“运行”-->输入“javac”-->“Enter”,如果能正常打印用法说明配置成功!
选择目标工具所在的文件夹跳出安装工具的目录
勾选目录点击Next,即可开始安装;安装的详细目录:
安装完成后,可以在Preference处查找到:
4.安装SDK(SDK解压即可使用)
安装好以后,通过SDK下载开发所需的源文件包:
这个操作只有在联网的时候才能进行下载。
四、“小查询工具”的设计与实现
1.总体设计
1)界面设计
主界面:
02)功能设计
对于这次课程设计编写的小查询工具,我们需要它能够帮助我们完成的功能为:手机归属地查询、身份证信息查询、区号邮编城市查询。对于小查询工具的每个查询功能,当用户点击相应的功能时,它能够帮助用户查询用户所需要的信息。
2.详细设计
1)模块设计
I、主界面模块(选题模块)
该模块是查询软件的主界面,在该模块界面有三个功能:手机归属地查询、身份证信息查询、区号邮编城市查询。用户根据自己所要查询的信息,选择相应的功能就可以查询用户想知道的信息。II、手机归属地查询模块
在该模块中,当用户在输入框中输入一个正确的号码时,点击“开始查询”按钮,就可以查询到该手机号码的归属地。III、身份证信息查询模块
在该模块中,当用户在输入框中输入一个正确的身份证号码时,再点击“开始查询”按钮,就可以查询到该身份证号码所代表的人的生日、性别以及出生地址。IV、区号邮编城市查询模块
在该模块中,当用户在输入框中输入一个正确的区号或者邮编或者城市名称时,点击“开始查询”按钮,就可以查询到其对应的省份、城市、区号、邮编以及归属地。
2)编码实现:
各包内的JAVA源文件:
界面切换等活动的基本代码:
3.手机上运行截图
手机截图:
5.安卓android课程设计报告 篇五
课
程 课
题指
导
名
称______手机安卓开发_______ 名
称______天气预报APP_______老
师______周唯___________
姓
名____黄柳________
学
号___2012600719_________ 班
级____12计2班________
小
组______棒棒糖_______ 时
间____2015年1月26 日_____
一、需求分析(一)引言
1.编写目的
1.1 为用户提供一个显示天气预报的软件,可以根据百度地图显示用户需求的城市位置,以及用图标表示各城市对应的气象信息,可以简洁的表示出“晴、雨、雪”和“气温”气象信息。
2.项目风险
2.1(项目风险识别是指找出影响项目目标顺利实现的主要风险因素,并识别出这些风险究竟有哪些基本特征、可能会影响到项目的那些方面。)2.2 联网收费视用户电话运营商的收费标准决定
2.3 手机或者无线信号不好时,可能无法连接或更新天气情况 3.预期读者和阅读建议
3.1 预期读者:会使用已经安装安卓系统的手机或者平板电脑及其他移动设备的用户
3.2 阅读建议:读者应通过该文档可以了解相关项目的需求分析、使用注意事项以及可能存在的风险
4.产品范围
2.2 手机,平板电脑,MP4,导航仪,上网本,电纸书等使用安卓系统的数码领域(二)综合描述
1.产品的状况
1.1 Android是一种以Linux为基础的开放源代码操作系统,主要使用于便携设备。目前未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他数码领域上。我们开发的相关项目正是一个在安卓平台上开发的软件,可以用这个软件来实现用户在一些简单的手持设备如手机或者平板电脑等上面及时的了解到用户所在城市的天气预报。
2.产品的功能
2.1 天气信息获取 2.2 天气信息显示 3.系统配置功能
3.1 用户类和特性
安卓平台用户:安卓新用户可以使用软件来了解用户所在城市的天气预报。熟悉安卓平台用户还可以选择对相关软件的系统按自己的喜好进行配置并保留自己的个性化系统配置。
安卓软件开发者:安卓软件开发者(喜好者)可以通过相关的开源代码来了解软件运行的原理。
3.2 运行环境
软件需要在支持安卓系统的可移动设备中正确安装才能正常运行。安卓版本需在2.2及以上,同时建议用户如果是在手机移动设备使用的话,需确保手机支持联网服务。
3.3 设计和实现上的限制
Eclipse是开发相关应用软件的首选集成开发环境,安卓开发环境首先需要安装支持java应用软件运行的java开发软件包(即JDK),然后安装集成开发环境Eclipse,最后安装Android SDK的Eclipse的ADT插件。
Android SDK和Eclipse的ADT插件是必须使用的。
软件支持高效、快速的数据存储方式,包括快速数据存储方式SharedPreferences、文件存储和轻量级关系数据块SQLite,可软件可以使用适合的方法对数据进行进程保存和访问。
3.4 假设和约束(依赖)
软件必须在安卓系统下才可以正常运行,若需要获取天气更新或者是短信服务,需确保用户的数码设备支持联网及短信服务。(三)外部接口需求 1 2 用户的手机设备可以支持联网。用户界面 软件接口
软件提供轻量级的进程间通信机制Intent,实现跨进程组件通信。4 访问硬件的API库函数通讯接口
4.1 HTTP 协议:有多种接口可以调用你可以用Java类库封装的HttpConnection 或者用Apach的开源项目的 HttpGet 或者HttpPost,服务器端 需要 编写 Serlvet来响应客户端的请求。
4.2 Sokcet : 就是 服务器端 不断监听 双方约定好的端口号,客户端通过服务器IP去请求连接,连接成功后,得到Socket 的输入输出流,直接操作即可。(四)系统功能需求
天气信息显示和获取
功能描述:需有一个显示天气情况的用户界面,要求百度地图显示各城市位置(如:北京、长沙、广州等3-5个城市),以及用图标表示各城市对应的气象信息,表示出“晴、雨、雪”和“气温”简洁气象信息。输入输出信息:
输入:当触摸某一城市对应的气象图标时,显示该城市当天的温度、湿度、风向和雨雪详细天气信息,并预报该城市后面几天的气象信息。
输出:气象信息的获取,从百度上获取天气预报信息,这些天气数据是通过后台服务获取的,这个后台服务可以按照一定时间间隔,并将各城市的天气信息保存到SQLite数据库中。
二、概要设计
三、Ui界面
我们的ui界面秉承着清新的风格开发出来的。
整个软件界面使用一个线性布局,让所有的元素从屏幕上方向下填充,并给整个线性布局进行权重划分。
线性布局的最上方是一个TextView,显示当前城市的名字,接着往下是一个相对布局,相对布局的左侧是天气的图片,右侧是三个天气相关的参数。
接着是一个线性布局,布局的左上方是三个TextView,分别显示“预报”,“趋势”,“指数”功能,通过点击相应的TextView,下方的一个线性布局展现不同的功能。功能面板文字的下方是一个大的线性布局,用来显示未来三天的天气情况。在这个大的线性布局中,又含有三个小的线性布局,这三个小线性布局中包含了日期,天气图片和风力状况等(这些控件从上到下垂直居中显示)。
通过给整个XML文件中LinearLayout布局的的子级布局添加权重,让各个部分从上到下有序的显示,让当前城市名称在屏幕的上方显示,功能面板位于屏幕下方显示,以匹配不同尺寸屏幕,让软件的显示效果更好。软件的整体布局风格是清新,优美,大方。
四、功能设计
功能上实现实时的获取天气信息,获取百度api返回数据,解析百度api返回的json数据,根据解析到的数据绘制气温趋势图,并将数据反馈到app上的相应的区域。通过使用ViewPager类,来实现天气预报软件中多个城市间的无缝页面切换。由于组员都缺少JAVA开发经验,对安卓开发也不熟悉,所以我们决定采用调用API的方法来实时获取不同城市的天气预报数据,在这次项目中我们将采用百度的车载API。通过HttpClient类和AsyncTask异步类来获取网络数据。最后通过Gson类来解析获取的网络数据,并给页面中的所有的布局空间设置id,在AsyncTask得到网络数据之后将这些数据同步到软件界面上,呈现给用户。
三、功能模块
我主要负责监听程序的设计,监听用户按键,并进行相应的动作。
只要用户滑动面板,就切换到下一个城市,并获得下一个城市的天气数据,显示在面板上。每隔15分钟自动更新天气数据。主要代码如下:
下面的代码处理网络连接部分,用GSON解析网络上获得的Json网页:
下面代码访问网络:
四、心得体会
6.android课程学习心得 篇六
前言
本文分五部分:Android电信业务系统、RIL、Telephony APP Framework、Phone APP、Android通话简单流程。
1、Android电信业务系统主要叙述Android整个电信业务系统的软件架构。
2、RIL主要叙述Android Radio Interface Layer相关要点,涉及的代码主要放在hardwareril目录下。
3、Telephony APP Framework主要简述电信业务系统Framework部分代码相关要点,涉及的代码主要放在frameworksbasetelephony目录下。
4、Phone APP主要叙述Android的电话业务模块,涉及的代码主要放在packagesappsPhone目录下。
5、Android通话简单流程主要叙述从上层Phone APP发起电话的函数调用流程。
一、Android电话业务系统
简单的说由三部分组成:Telephony Application(Java)+ Telephony Frameworks(Java)+ RIL(C/C++)
二、RIL RIL(Radio Interface Layer),是Android电信业务系统和底层硬件之间的抽象层,Android提供该层方便用户移植。手机每次请求相应的电信服务,如电话、短信、网络连接等,都是通过AT指令与底层硬件进行交互的,拿电话来讲,用户请求拨打电话,需要向RIL发送相关的请求,接着RIL按照用户的请求,调用相应的AT指令发送接口给底层发送AT指令,完成用户拨打电话的流程。简单的说,对RIL的移植,主要是针对不同的设备针对AT指令做相应的修改。
1、RIL移植层的三个组成部分
1)Vendor RIL 提供AT指令发送接口 2)RIL Daemon 加载RIL相关的库同时初始化RIL,注册RIL相关函数接口。同时,RILD也是上层和底层RIL的调用中转站。3)RIL JNI Layer RIL JNI接口,提供上层Telephony APP Framework调用
2、RIL的初始化流程
加载ril.lib RIL_Init() RIL_register(),详细可见ridl.c中的main()函数。
3、RIL接口的调用方式
有两种方式:主动请求(Solicited)和被动请求(Unsolicited)1)主动请求
2)被动请求
void(*OnUnsolicitedResponse)(int unsolResponse, const void *data,size_t datalen);
4、涉及的主要源代码文件
1)reference-ril.c 本文件涉及的重要内部函数及功能 requestRadioPower
开启通讯模块 requestQueryNetworkSelectionMode 查询网络模式 requestGetCurrentCalls
获取当前通话 requestDial
请求呼叫 requestWriteSmsToSim
写入短信至SIM卡 requestHangup
挂断电话 requestSignalStrength
获取信号强度 requestRegistrationState
获取卡注册状态 requestOperator
获取运营商名称 requestSendSMS
请求发送短信 requestSetupDataCall
拨号上网 requestSMSAcknowledge
短信回报
requestEnterSimPin
请求输入SIM PIN码 requestSendUSSD
请求USSD业务 本文件提供给ril.cpp调用的外部接口 RIL_Init
RIL初始化 onRequest
AT请求指令接口(异步方式)
getVersion
获取RIL版本号,当前为“android reference-ril 1.0” onUnsolicited
AT请求指令接口(同步方式)
2)ril.cpp 该文件主要提供ril.java调用接口,实现RIL的JNI调用方式、RIL Event管理机制 实现了供上层调用的接口 typedef struct {
int requestNumber;
void(*dispatchFunction)(Parcel &p, struct RequestInfo *pRI);
int(*responseFunction)(Parcel &p, void *response, size_t responselen);} CommandInfo;具体执行的操作可以看头文件ril_commands.h 举一个例子:
拨打电话,对应的requestNumber为RIL_REQUEST_DIAL,对应的dispatchFunction为dispatchDial,对应的responseFunction为responseFunction。 RIL Event管理
与ril_event.cpp的Event接口配合实现RIL Event管理 RIL_startEventLoop rilEventAddWakeup eventLoop ril_event_init ril_event_set ril_event_add ril_event_del 4)rild.c rild的主要初始化工作都在main函数中进行。
5、RIL JNI上层对外接口
SetOnNITZTime
getIccCardStatus
supplyIccPin
supplyIccPuk
supplyIccPin2
supplyIccPuk2
changeIccPin
changeIccPin2
getCurrentCalls
getPDPContextList dial
getIMSI
getIMEI
getIMEISV
hangupConnection
acceptCall
rejectCall
getLastCallFailCause getLastPdpFailCause getLastDataCallFailCause setMute
getMute
getSignalStrength
getRegistrationState getGPRSRegistrationState getOperator
设置网络身份和时区 获取SIM卡状态 输入PIN码 输入PUK码 输入PIN2码 输入PUK2码 修改PIN码 修改PIN2码 获取当前通话 获取PDP列表 拨号
获取IMSI 获取IMEI 获取IMEISV 挂断电话 接听电话 电话拒接
获取Call失败错误码 获取PDP失败错误码 获取拨号连接失败错误码
设置手机静音模式(静音/非静音)获取手机静音模式(静音/非静音)获取信号强度 获取卡注册状态 获取GPRS注册状态 获取运营商 sendDtmf
startDtmf stopDtmf sendSMS deleteSmsOnSim writeSmsToSim
发送DTMF Start DTMF Stop DTMF 发送短信
删除SIM卡短信 保存短信至SIM卡
6、RIL机制
RIL类有三个内部类:RILRequest、RILSender、RILReceiver,这三个内部类共同实现上层的电信业务操作请求。
RILRequest,电信服务请求,上层应用通过该类与RIL JNI层进行消息的交互,同时RIL JNI层也通过该类与RIL底层进行消息的交互; RILSender,实现上层请求的命令发送 RILReceiver,负责接收底层的Response 以下是dial的RIL调用序列 上层调用dial 设置Request请求并发送至RILSender消息处理队列
RILRequest rr = RILRequest.obtain(RIL_REQUEST_DIAL, result);…
send(rr); RILSender消息处理队列消息队列收到EVENT_SEND后往mSocket里边填写相应请求 RILD从mSocket中读取相应的请求为RIL_REQUEST_DIAL,并设置相应的event 执行dispatchDial onRequest requestDial发送AT指令
底层给予responseVoid的响应
RILD向mSocket填写相应的响应信息,并往RILReceiver消息队列发送 processResponse processSolicited responseVoid(JNI)
三、Telephony APP Framework概述
电信业务Framework涉及Call、SMS、SIM卡、PDP等,代码分为两个部分,一个是SDK API,一个是平台内部类,不对外开放。这部分简单的说,就是上层电信业务与底层RIL的中间层。
1、Internal Class 1)ADN(Abbreviated Dialing Numbers,缩位拨号)相关的类 AdnRecord AdnRecordCache AdnRecordLoader 2)Call相关的类
Call:基类,GsmCall和CdmaCall都由该基类扩展实现 CdmaCal GsmCall
CallTracker:基类,GsmCallTracker和CdmaCallTracker都由这个基类进行扩展实现 GsmCallTracker: CdmaCallTracker PhoneBase:基类,CDMAPhone和GSMPhone都由这个基类扩展实现 CDMAPhone GSMPhone Phone:电话操作的一些接口 CallerInfo CallerInfoAsyncQuery CallForwardInfo:呼叫转移
CallFailCause:GSM Call失败错误码 CallFailCause:CDMA Call失败错误码 3)数据连接相关类
DataConnection:基类,GsmDataConnection和CdmaDataConnection都基于该类扩展实现 GsmDataConnection CdmaDataConnection DataConnectionTracker:基类,CdmaDataConnectionTracker和GsmDataConnectionTracker都基于该类进行扩展实现 CdmaDataConnectionTracker GsmDataConnectionTracker 4)SIM卡相关类
IccCard:基类,RuimCard和SimCard都由该类进行扩展实现 RuimCard SimCard IccRecords:基类,RuimRecords和SIMRecords都基于该类进行扩展实现 RuimRecords SIMRecords IccProvider IccUtils 5)SMS相关类
SMSDispatcher:实现发送短信
SmsMessageBase:基类,SmsMessage由该类扩展实现 SmsMessage:短信PDU包解析
2、SDK API Class 实现SDK API接口,具体架构见SDK API文档
四、Phone APP Android自带一个Phone App,实现了GSM/CDMA的通话功能,这部分代码放在packagesappsPhone目录下。
Phone APP开机就运行了,可以从AndroidManifest.xml设置的应用权限看出来
A、初始化Telephony Framework B、Power、Ringer、Keyboard、状态栏、SIM卡的注册工作 C、CallNotifier、PhoneUtils初始化工作 具体可以参见onCreate Phone APP有如下几个重要的类
PhoneApp requestWakeState:判断手机是否可休眠 wakeUpScreen:唤醒手机
PhoneAppBroadcastReceiver:内部类,可以实时监测手机的状态,飞行模式、蓝牙耳机等。 PhoneUtils 电话基本组件接口,实现电话的一些基本操作,如Dial、Answer、Hangup、Hold等 placeCall:电话呼出 Hangup:挂断电话 answerCall:接听电话
setMute/ setMuteInternal:静音 turnOnSpeaker:免提
showIncomingCallUi:显示来电界面 InCallScreen 该类实现通话界面流程,主要如下:
case R.id.menuAnswerAndHold,保持当前通话并接听: internalAnswerCall PhoneUtils.answerCall(mPhone)case R.id.menuAnswerAndEnd,结束当前通话并接听:
internalAnswerAndEnd PhoneUtils.answerAndEndActive(mPhone)case R.id.menuAnswer,接听:
internalAnswerCall PhoneUtils.answerCall(mPhone)case R.id.menuIgnore,忽略:
internalHangupRingingCall PhoneUtils.hangupRingingCall(mPhone)case R.id.menuSwapCalls,切换通话:
internalSwapCalls PhoneUtils.switchHoldingAndActive(mPhone)case R.id.menuMergeCalls,合并通话: PhoneUtils.mergeCalls(mPhone)case R.id.menuManageConference,管理电话会议:
setInCallScreenMode(InCallScreenMode.MANAGE_CONFERENCE)case R.id.menuShowDialpad,显示拨号键盘: onShowHideDialpad mDialer.openDialer(true)case R.id.menuSpeaker,免提:
onSpeakerClick PhoneUtils.turnOnSpeaker case R.id.menuBluetooth,蓝牙: onBluetoothClick case R.id.menuMute,静音:
onMuteClick PhoneUtils.setMute case R.id.menuHold,通话保持: onHoldClick case R.id.menuAddCall,添加通话: PhoneUtils.startNewCall(mPhone)case R.id.menuEndCall,结束通话: internalHangup PhoneUtils.hangup(mPhone) DTMFTwelveKeyDialer 该类实现DTMF processDtmf:发送DTMF clearDigits:清除DTMF键码 startDtmfTone:播放DTMF Tone stopDtmfTone:停止播放DTMF Tone CallNotifier 继承于Handler,用来实时监测通话状态并通知Phone Application,如PHONE_NEW_RINGING_CONNECTION(来电),PHONE_INCOMING_RING(来电响铃),PHONE_DISCONNECT(通话挂断),PHONE_BATTERY_LOW(电池电量低),具体相对应的处理可参见handleMessage CallFeaturesSetting 实现通话设置,此外该类包含一个内部类VoiceMailProviderSettings用来实现语音信箱的设置
CallCard/ InCallTouchUi 这两个类都是继承于FrameLayout,Phone用来实现通话自身的布局需求。
updatePhotoForCallState:更新替代图片(如果通话号码有设置特定代替图片的)updateDisplayForConference:通话UI更新(用于电话会议)updateDisplayForPerson:通话UI更新
getCallFailedString:获取通话失败错误字符串 displayOnHoldCallStatus:显示通话保持UI displayMainCallStatus:更新通话UI updateState:更新通话状态(供外部类调用) BluetoothHandsfree/BluetoothHeadsetService 实现通话蓝牙耳机功能,其实现核心是BluetoothHeadsetService,在PhoneApp 创建的时候会启动它。BluetoothHeadsetService 通过接收底层蓝牙服务的状态消息来改变自身状态,同时它也会监听通话的状态变化。onBluetoothEnabled:开启蓝牙设备 onBluetoothDisabled:关闭蓝牙设备 connectHeadset:连接蓝牙设备 audioOn:开启audio audioOff:关闭audio redial:通过蓝牙设备重播电话 updateBatteryState:更新电池强度 updateSignalState:更新信号强度
五、Android通话简单流程
1、拨打流程(以电话本入口为例)
进入电话本,以某个联系人发起呼叫,此时进入TwelveKeyDialer类的onClick函数case R.id.dialButton分支,启动OutgoingCallBroadcaster Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//以新的TASK启动 OutgoingCallBroadcaster发出Broadcast Announcement sendOrderedBroadcast(broadcastIntent, PERMISSION,new OutgoingCallReceiver(), null, Activity.RESULT_OK, number, null);收到Broadcast后,进入OutgoingCallReceiver中的doReceive启动InCallScreen 进入internalResolveIntent mInCallInitialStatus = internalResolveIntent(getIntent());placeCall PhoneUtils.placeCallVia/ PhoneUtils.placeCall Connection cn = phone.dial(number);Phone是Interface,所属的dial接口是在PhoneBase的子类GSMPhone中实现 进入GsmCallTracker类中的dial函数 mCT.dial(newDialString);调用CommandsInterface的dial接口
cm.dial(pendingMO.address, clirMode, obtainCompleteMessage());CommandsInterface的dial接口是在RIL.java中实现的 调用JNI接口dial ……后续就是RIL JNI与libril的交互过程,见RIL机制
2、来电流程
CallNotifier的消息处理队列会收到PHONE_NEW_RINGING_CONNECTION onNewRingingConnection响铃或震动(来电自动接听也在里边处理)显示来电界面InCallScreen PhoneUtils.showIncomingCallUi();
3、来电处理
接听
internalAnswerCall
PhoneUtils.answerCall(mPhone)
关闭来电铃声等,进入接听流程phone.acceptCall()调用GsmCallTracker的acceptCall mCT.acceptCall();调用CommandsInterface acceptCall 接口 cm.acceptCall(obtainCompleteMessage())
调用RIL JNI接口acceptCall向底层发送请求
……后续就是RIL JNI与libril的交互过程,见RIL机制 挂断
internalHangup PhoneUtils.hangup(mPhone) 调用GsmCallTracker的handup 调用CommandsInterface hangupConnection接口
cm.hangupConnection(conn.getGSMIndex(), obtainCompleteMessage());调用RIL JNI接口hangupConnection向底层发送挂断请求 ……后续就是RIL JNI与libril的交互过程,见RIL机制 通话保持恢复
PhoneUtils.switchHoldingAndActive(mPhone) 添加一个新通话,实现多方通话 PhoneUtils.startNewCall(mPhone)
Android_Phone源代码来电流程解读
***************************CallNotifier***************************
本类extends Handler并且implements CallerInfoAsyncQuery.OnQueryCompleteListener
电话状态改变之后本类会接到Message,然后本Handler通过Message的不同,进入不同的case:
然后调用不同的方法处理各种状态改变。
同时实现了OnQueryCompleteListener接口,当来电的时候会帮助执行查询操作,比如查询并调用
Ringer设置响铃方式。
当来电时,本类会接受到一个PHONE_NEW_RINGING_CONNECTION(Message.what),然后调用对应的方法
onNewRingingConnection(),该方法又会调用startIncomingCallQuery()方法,该方法就查询用户
设置的铃声(可能是系统的,也可能是用户自定义的),如果查询完成则直接调用onQueryComplete().假如执行超时的话,将会发送一个延时Message,延时后将默认调用系统的铃声。
假如在延时发送Message过程中Query已经完成,由于CallNotifier实现了OnQueryCopleteListener,就会自动调用onQueryComplete()方法,该方法将会首先把可能存在的延时Message给Remove,以防止
再次设置铃声。接着调用onCustomRingQueryComplete()方法。然后该方法里面会调用Ringer的ring()
方法启动响铃。
********************************Ringer*************************** Ringer的ring()方法会启动相应的响铃方式。
响铃之后将会又Message发送,其内容为PHONE_STATE_CHANGED
*******************************InCallScreen**********************
InCallScreen将会接受到发送的PHONE_STATE_CHANGED消息,然后调用onPhoneStateChanged()方法
该方法将更新屏幕,CallNotifier的onCustomRingQueryComplete里也会通过PhoneUtils.showIncomingCallUi()
来启动InCallScreen屏幕。然后由InCallScreen处理,处理方式与前面打电话的大体一致,不过该类第一次调用时执行了
7.android课程学习心得 篇七
1 Android系统
1.1 Android系统介绍
Android系统基于Linux开发, 是由谷歌在2007年做成的一个开源手机操作系统, 在国内官方称之为“安致”, 也就是我们常说的“安卓”系统。Android在推出两年时间内便打败诺基亚的Symbian系统, 这也是导致诺基亚衰败的重要因素之一。在我国, Android系统具有十分广大的市场, 不仅局限于手机系统, 更广泛应用于各类智能终端, 而且由于其开源性, 二次开发也极为普遍。
1.2 Android组件
Android系统有Activity、Broadcast Receiver、Service以及Content Provider这四个重要的组件。其中, Activity是与用户进行交互的可视化层面, Broadcast Receiver是负责接收广播消息, Service属于后台应用, 需要常驻系统, Content Provider是Android系统的数据共享机制, 可以实现应用程序之间的相互访问。
2 设计移动学习平台
2.1 应用模式的选择
2.1.1 单机客户端。
单机客户端是指把所有的学习课程全部安装在移动端, 这样的好处在于无需联网, 只要依靠设备本身就可以, 但客户端程序会变得非常庞大。因此, 很明显, 在当代以智能机为主题的移动终端时代, 网络化高度发达, 不适合使用这样的客户端。
2.1.2 B/S方式。
B/S即Browser-Server客户端-服务器体系, 这种方式利用服务器通信和协议, 在网络上实现内容的交互, 可以通过GSM、TDMA、CDMA、3G等网络进行。这种方式的优势在于没有操作系统的差异性, 可以直接通过互联网进行信息传输, 也无需客户端。因此, 这种方式又称为瘦客户端/服务器端方式。但这种客户端的用户体验非常不好, 难以在大量数据交互的情况下实现方便操作。
2.1.3 C/S方式。
C/S是相对于B/S而言的, 称之为胖客户端/服务器端方式。需要在移动终端安装客户端, 在客户端的基础上, 通过网络进行数据交换。客户端的存在增强了用户的体验性, 并且可以实现许多特色功能, 比如定位、本地存档等, 而且由于本身具有界面, 所以节省了界面下载所消耗的流量, 可以说是单机客户端和瘦客户端/服务器端的结合体。
因此, 从以上分析可以看出, 我们进行Android移动学习平台设计时, 选择胖客户端/服务器端方式比较好。
2.2 通信方式的选择
Android客户端和服务器之间的通信方式主要有Socket通信、使用URL对网络资源进行访问、HTTP URL Connection、HTTP Client、Web Service五种。基于TCP、UDP的Socket通信, 由于要在服务器对并发同步互斥问题进行编程处理, 所以非常繁琐;使用Web Service方式, 那么TPC访问和XML解析必须在客户端进行, 效率偏低;HTTP Client能够简化和网站的交互并且处理Cookie等问题, 相对比较好。所以, 我们的移动学习平台可以使用HTTP Client来实现通信。
2.3 客户端设计
客户端是实现人机交互的重要一环, 是访问学习资源的入口。我们应当设置的模块包括资料阅读模块、上传下载模块、通信模块等。
阅读模块可以通过PDF阅读器来实现, 多媒体资源可以在服务器上生成播放地址, 通过URL进行播放[3]。通信模块可以采用Jabber实现即时通信, 而且可以通过Android的邮件系统来实现非即时通信。同时, 可以充分挖掘移动终端互联网的优势, 应用GIS技术实现位置共享, 可以搜集附近的学习者完成互助学习。
2.4 服务器端的设计
移动学习平台的服务器端的主要功能应该是对学习资源的管理和发布, 包括增加学习资源、删改学习资源等。由于服务器技术的成熟, 可供我们选择的搭建实现方案有很多, 在此我们选择Java EE分层结构的服务器。结构分为视图层、控制层、业务逻辑层、DAO层。这种体系可以使数据访问等在中间层进行, 客户端和数据库之间不用直接交互。服务器端的应用构架如下图所示。
Android客户端可以通过Apache HTTP Client与服务器进行数据交互, 我们的移动学习平台的服务器采用的是JSON数据格式。应用向服务器发送请求时, 采用Servlet充当控制器, 并不是Struts 2的Action。图2是基于Android客户端和服务器的整合示意图。
比较上面的两个图, 我们可以发现两者十分相近。由此我们可以知道, 应用Java EE架构的优势在于, 不需要对服务器的应用结构做很多改变, 只需要在传统应用的基础上加入Servlet来为客户端响应提供服务就可以了。这样极大地减少了开发所需要的时间。
3 移动学习平台的实现
3.1 主要模块功能的实现
3.1.1 登录功能。
用户在输入用户名和密码之后, 客户端向服务器接口文件传送输入的信息, 服务器将之与数据库信息进行比对。如果验证通过, 则创建新的activity进入主界面, 反之则给用户返回错误提示。
3.1.2 课程学习功能的实现。
学习功能是我们平台需要实现的最主要功能。首先SAX对服务器的数据进行解析, 然后完成服务器和客户端的XML交互, 找到界面的List View然后进行显示。进行XML数据交互首先需要配置客户端文件, 定义服务器端的XML输入地址。XML数据是通过服务器获取数据库中的数据, 客户端在获取XML地址之后可以进行XML解析。XML的解析可以通过SAX和DOM两种方式来实现, 在移动学习平台上我们采用SAX方式, 这种方式占用资源少, 在Android系统中应用广泛。在Java SDK体系下, javax.xml.parsers包中有两个SAX相关类:SAX解析器和SAX解析器工厂。解析器工厂中有用来进行设置和获取配置的set和get, 其中最为重要的是对new SAXParser () 进行调用创建SAXparser类。
3.2 平台测试
在系统完成之后, 必须经过相应的测试完善, 查找系统BUG, 优化系统性能, 才能投入使用。
3.2.1 性能测试。
性能测试是多方面的, 包括可用性测试、UI测试、响应速度测试等。可用性测试需要对软件的导航、图形进行测试, 保证导航的准确性以及界面的整体性。响应速度测试是要保证在用户不同的网络环境下都能得到较好的体验, 起码保证最基本的用户体验, 如果发生等待时间过长的情况, 可以自动识别并能对用户进行提示等。
3.2.2 兼容性测试。
兼容性测试是推广应用平台的重要测试环节。由于Android系统的更新换代很迅速, 我们需要考虑学习平台能否在各种版本下正常工作。另外还需要对服务器进行兼容性测试, 这些测试都需要在软件初步开发之后再进行。
4 总结
总而言之, 针对当今移动智能端迅速普及、逐渐步入移动生活时代的大趋势越来越明显的现状, 本文在Android平台的基础上, 提出了移动学习平台的构想并且进行了详细的设计, 并对实现过程中需要考虑的问题进行了分析。随着当今人们生活节奏的逐步加快, 零散时间成为重要的学习时间, 而移动学习平台正好可以满足人们对时间利用的需要。因此, 加快移动学习平台的设计实现, 具有十分重要的现实意义。
参考文献
8.android课程学习心得 篇八
【关键词】Android 人才培养 课程结构
【课题项目】广西教育厅课题,课题编号:2014JGA398,课题名称:高职《Android应用软件开发》课程项目化教学的研究与实践。
【中图分类号】G712.3【文献标识码】A 【文章编号】2095-3089(2016)20-0040-01
一、Android人才培养存在的问题
目前,在移动应用开发方面的人才培养存在三个方面的问题。
(1)缺乏衡量标准。对移动应用开发人才的判别目前还缺乏统一的衡量标准,大量准备进入该领域的相关人才,由于缺乏相应的资质证明而被挡在门外。
(2)结构不合理。中国移动应用开发技术的人才分布呈现“垄断”特征。大量的该领域相关人才集中在了少数企业。在区域分布上也存在明显的失衡,北上广等拥有总量的80%左右。
(3)复合型人才偏少。移动应用开发是知识密集、人才密集的行业。而目前熟悉移动设备设计、精通移动通信技术、熟悉移动应用开发技术、能够把握客户需求等的复合型人才非常稀少。
二、移动互联行业情况分析
移动互联行业企业的特点是技术性强,技术更新快。通过相关专业毕业生或1年工作经验程序员,学历为大专的相关职位的岗位技术需求进行职业能力调研分析,技术需求多集中在:
(1)熟练掌握JAVA编程语言,熟悉J2EE开发。
(2)掌握Eclpise开发工具,熟悉Android SDK/NDK,了解CVS或SVN等相关源代码版本控制系统。
(3)熟悉MYSQL, ORACLE数据库开发。
(4)熟悉嵌入式Linux开发流程。
(5)熟悉XML,HTTP,TCP/IP,SOCKET等协议,熟悉Socket, HTTP, Thread等网络编程。
(6)熟练掌握Android的API,理解Android的体系结构。
(7)掌握Android中界面绘制,后台运行,数据存储等的原理。
(8)熟悉手机网络编程、TCP/IP, C/S、多线程开发技术。
(9)熟练掌握Android界面开发。
(10)有良好的编码习惯和技术文档编写能力;熟练阅读英文技术文档,具有很强的沟通、组织和协调能力。
三、典型工作任务分析
通过专家研讨会,请专家共同回忆和陈述自己的职业成长历程、划分职业发展阶段,找出各阶段有代表性的工作任务,并归纳出典型工作任务的框架。
典型工作任务1:移动互联网站运营与管理
典型工作任务2:移动互联网软件测试
典型工作任务3:网站信息维护
典型工作任务4:移动互联网硬件测试
典型工作任务5:移动终端UI设计
典型工作任务6:移动应用项目文档编写
典型工作任务7:移动终端服务器管理与开发
典型工作任务8:移动终端软件设计与应用
四、典型工作任务转换为学习领域课程
课程体系开发一定要立足工作任务分析表,建立具有工作结构特点的课程体系。移动互联应用技术专业工学结合一体化课程结构如图:
专业学习领域核心课程六门,包括移动互联系统集成、移动互联软件测试、移动互联软件文档、移动终端UI设计、移动终端软件设计、移动互联网络开发。
五、结束语
本文以柳州铁道职业技术学院移动互联应用开发专业人才培养方案为例,结合企业技能岗位的要求,分析职业岗位的典型工作任务,将典型工作任务提炼转换成学习领域课程,编制课程方案。对移动互联应用开发专业的课程开发起到了很好的指导作用。
参考文献:
[1]张洪生.浅析高职院校培养“高端技能型人才”与“以就业为导向”之关系[J].中国职业技术教育.2011,(27).
[2]赵志群.职业教育工学结合一体化课程开发指南[M].清华大学出版社.2009.
作者简介:
9.android课程学习心得 篇九
经过上面的学习相信你已经掌握了Java基础了,是时候开始正式进入Android学习的阶段了。
Android学习之路
我自己整理的Android开发详细资料,这篇博客影响了无数Android开发者,可谓Android开发必备,某种意义上来说,自学Android有这篇博客足够了。
《第一行代码》
郭霖大神的最新力作,全书由浅入深、系统全面地讲解了Android软件开发的方方面面,而且是针对Android 4.0进行讲解的,非常适合Android入门。
book.douban.com/subject/25942191/
Mars老师的Android开发视频教程
marschen.com/portal.php
极客学院Android开发视频教程
www.jikexueyuan.com/path/android/
慕课网的Android视频教程
www.imooc.com/course/list?c=android
10.android课程学习心得 篇十
Android(1) - 在 Windows 下搭建 Android 开发环境,以及 Hello World 程序
搭建 Android 的开发环境,以及写一个简单的示例程序
在 Windows 下搭建 Android 开发环境 Android 项目的目录结构说明 写一个简单的 Hello World 程序
一、在 Windows 下搭建 Android 开发环境
1、安装 JDK (Java Development Kit)
download.java.net/jdk6/
2、安装 Android SDK
developer.android.com/sdk
3、安装 Eclipse
/android/eclipse/ ,然后安装 ADT(Android Development Tools)
5、新建 Android 项目
“New” ->Android Project,Project Name - 项目名称;Build Target - 编译项目的 SDK 版本;Application name - 程序名称;Package name - 包名;Min SDK Version - 程序所支持的最低 SDK 版本代号(2 对应 1.1,3 对应 1.5,4 对应 1.6)
6、运行 Android 项目
打开菜单 “Run” ->“Run Configurations” ->New launch configuration,设置启动项目名称,在 Android 选项卡中选择启动项目,在 Target 选项卡中设置模拟器
7、创建/使用模拟 SD 卡
创建 SD 卡,运行类似如下命令:mksdcard -l sdcard 512M d:androidsdcard.img
模拟器中使用 SD 卡,在项目配置的 Target 选项卡的 “Additional Emulator Command Line Options” 框中输入类似如下参数:-sdcard d:androidsdcard.img
8、配置模拟器
运行类似如下命令:android create avd --name android15 --target 2。或者直接在菜单 “Window” ->“Android AVD Manager” 中配置模拟器
9、浏览模拟 SD 卡中的内容
调试程序,在 DDMS 中选择 “File Explorer” ,在其中的 sdcard 目录下就是模拟 SD 卡中的内容
10、查看日志 LogCat
Window ->Show View ->Other ->Android ->LogCat
11、在模拟器中安装/卸载 apk
安装 apk 运行类似如下命令:adb install name.apk;卸载 apk 运行类似如下命令:adb uninstall packagename(注:这里的参数是需要卸载的包名)
12、反编译 Android 程序
解压 apk 文件,取出其中的 classes.dex 文件,运行类似如下命令:dexdump.exe -d classes.dex >dump.txt(其意思是将 classes.dex dump 出来,并将反编译后的代码保存到指定的文本文件中)
13、人品不好是出现的某些错误的解决办法
如果出现类似如下的错误等
no classfiles specified
Conversion to Dalvik format failed with error 1
解决办法:Project ->Clean
出现 Android SDK Content Loader 60% (一直卡在 60%)
解决办法:Project ->去掉 Build Automatically 前面的勾
14、查看 SDK 源代码
先想办法搞到源代码,如这个地址 /android.asp ,然后将其解压到 SDK 根路径下的 sources 文件夹内即可
二、Android 项目的目录结构
1、src - 用于放置源程序
2、gen - 自动生成 R.java 文件,用于引用资源文件(即 res 目录下的数据)
3、assets - 用于放置原始文件,Android 不会对此目录下的文件做任何处理,这是其与 res 目录不同的地方
4、res/drawable - 用于放置图片之类的资源;res/layout - 用于放置布局用的 xml 文件;res/values - 用于放置一些常量数据
5、AndroidManifest.xml - Android 程序的清单文件,相当于配置文件,配置应用程序名称、图标、Activity、Service、Receiver等
三、Hello World 程序
1、res/layout/main.xml 代码
android:layout_width=“fill_parent”
android:layout_height=“fill_parent”
android:id=“@+id/layout”
>
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”
android:text=“@string/hello”
/>
android:layout_width=“fill_parent”
android:layout_height=“wrap_content”
android:id=“@+id/txt”
/>
2、res/values/strings.xml
代码
layout 直接调用 values 中的.字符串
编程方式调用 values 中的字符串
webabcd_hello
3、res/drawable 目录下放置一个名为 icon.png 的图片文件
4、AndroidManifest.xml
代码
package=“com.webabcd.hello”
android:versionCode=“1”
android:versionName=“1.0”>
android:label=“@string/app_name”>
5、Main.java 代码
package com.webabcd.hello;
import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;
public class Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 将指定的布局文件作为 Activity 所显示的内容
setContentView(R.layout.main);
// 动态地在指定的容器控件上添加新的控件
TextView txt = new TextView(this);
txt.setText(“动态添加控件”);
// setContentView(txt);
((LinearLayout)this.findViewById(R.id.layout)).addView(txt);
// 引用资源文件内的内容作为输出内容
TextView txt1 = (TextView)this.findViewById(R.id.txt);
txt1.setText(this.getString(R.string.hello2));
}
}
Android(2) - 布局(Layout)和菜单(Menu)
介绍
在 Android 中各种布局的应用,以及菜单效果的实现
? 各种布局方式的应用,FrameLayout, LinearLayout, TableLayout, AbsoluteLayout, RelativeLayout
?
为指定元素配置上下文菜单,为应用程序配置选项菜单,以及多级菜单的实现
1、各种布局方式的演示 res/layout/main.xml 代码
android:layout_width=“fill_parent” android:layout_height=“fill_parent”>
android:layout_width=“fill_parent”>
android:layout_height=“wrap_content” android:text=“FrameLayout”>
android:layout_height=“wrap_content” android:text=“Frame Layout”>
11.android课程学习心得 篇十一
随着采用Android系统的智能手机、平板电脑、电子书、多媒体网络终端等电子产品的普及,Android平台人才的缺口日益显现。据相关部门发布的统计数据,目前国内的3G研发人才缺口有三、四百万,其中Android研发人才缺口至少60万。从人才需求类型来看,目前对Android人才需求一类是偏向硬件驱动的Android人才需求,一类是偏向软件应用的Android人才需求。从目前的招聘需求来看,后者的需求最大,包括手机游戏、手机终端应用软件和其他手机应用软件的开发。Android平台开发现在已经成为计算机专业的一个主要的就业方向。学院针对这一新的就业方向,也开设了面向Android平台开发的专业课程。
2 Android平台开发教学中存在问题
采用传统的计算机专业课程教学方式,受到教材、教学方法、教学环境等诸多因素的影响,教学效果不甚理想。具体表现在:
2.1 教材千篇一律
基于Android平台的软件开发是近几年才兴起的一个计算机专业方向,该专业的教材编写落后于专业的发展,很多教材都是把几个开发完成的Android软件进行大段的代码、软件界面图片的罗列,课本结构大同小异,多数同学看到大量的代码无从着手,打击了学生的自信息,给学生学习造成了困难,老师使用教材上课时,按照课本内容上课有念书的感觉,对课本知识点的梳理也有自己的想法,使用起来不是得心应手。
2.2 教学方法单一
现在学校大多安排在多媒体、机房上课,教学环境有了很大的改善,但教学方法基本仍以多媒体教学为主,老师通过幻灯片讲解教材内容,学生被动听讲,师生交流很少,即便有也大多为老师提问,学生回答的方式,很多学生在课程进行到一半时就跟不上教学进度,后半学期基本在迷茫中度过,虽然有个别的教学案例让学生模拟开发,但课上时间太短,往往还未完成案例,就已经下课,课下缺少辅导,没有和教师沟通的途径,加上学生学习主动性不强,遇到问题很难自主解决,问题逐渐积累,慢慢失去了学习的兴趣。
2.3 实践动手能力差
Android平台开发对学生实践动手能力要求很高,因为软件的开发不是在作业本上用笔写出来的,而是在Android平台下动手编写出的代码,很多同学从专业课学习开始,动手能力就很差,究其原因一是缺乏实践环境,二是缺乏实际项目,三是自身比较懒惰,而这其中缺乏实际开发项目是最大的问题,学生课本上练习的例题或者课后作业和实际项目有很大差距,往往作业完成很好,碰到实际开发项目时就无从下手,或者碰到很多的问题不知道怎么解决。这些都大大限制了学生的专业学习和后续的发展。
2.4 考核方式滞后
由于学校的相关考核方式是大而全,针对所有专业和课程,考核方式仍是传统的日常考勤、作业、实验报告、期末考试4方面的综合成绩,这很难反映出计算机专业的特点,很难看到学生技术能力和综合素质。
以上这些问题的存在,限制了学生学习的积极性,打击了学生学习的自信心,不符合现阶段对计算机专业毕业生的要求,做不到毕业即就业,基于Android平台的开发能力几乎没有。所以要从教材编写、教学方法、实践环境、考核方式4个方面对课程进行彻底的改革。
3 基于项目驱动的教学方法
基于项目驱动的教学方法,首先应该编写一本适合本课程、本专业学生水平的教材,按照项目教学法的思路,改变传统的教材编写方式,以基于Android平台开发的应用软件为项目,进行项目分解,按照软件公司开发项目流程进行教学内容的整理。其次为学生提供一个良好的实践环境,本课程安排在教学做一体化实训室,该实训室按照软件公司环境布置,分为讨论区、开发区、学习区、休息区,让学生感受到未来就业的环境,同时也为课程教学提供很好的硬件环境。
基于项目驱动的教学方法,就是以学生为主体,提高学生自主学习能力,学生不再是简单的回答问题,而是主动发现问题,解决问题,从而获取知识,学生在项目开发中扮演软件公司的程序员,以一个程序员的思想和状态进行项目的开发,提前感受工作环境,锻炼学生的团队合作能力。
4 组织流程
4.1 选择开发项目
采用角色扮演教学法,老师模拟软件公司项目经理,学生模拟软件公司程序员,由老师讲解项目开发背景,项目开发注意事项和项目开发流程。这里选择了和学院有校企合作关系的软件公司开发成熟的Android平台软件——校园综合管理平台作为学习项目,该项目成熟、稳定,并获得了市场的检验,难度适中,符合学生的认知和学习规律。
4.2 人员分组、小组成员分工
接受项目后,班级同学自由分组,选定小组负责人,小组内部讨论,根据各学生特点进行小组内部的任务分工。分发小组评价表、任务完成统计表、自我评价表。小组成员可以负责资料收集、代码编写、界面开发、代码测试、任务报告书撰写等工作,可以在完成不同任务时进行角色的互换,让每个同学都能把以上工作完成一次。
4.3 教学安排
以学生为主体,调动学生学习的自主性和积极性,采用头脑风暴法,老师给出与任务相关知识的问题,学生带着问题自主学习,通过小组讨论、回答问题,考察学生掌握知识情况,通过对问题的回答,老师发现学生掌握不好的知识点,并对该知识点进行讲解,时间不超过15分钟。接下来采用角色扮演法,学生以程序员的身份进行任务的开发,小组内部分工合作。在任务开发过程中,结合教师自主开发的学习网站,查找相关资料,完成项目开发,并进行任务报告书的撰写、代码的上传。
将校园综合管理平台项目分解为10个子项目,每个项目设置3个情景,每个情景设置2至4个任务。每个子项目设置相应的知识目标、能力目标和素质目标,具体流程是:情景引入,任务提出,考察知识点,小组分工,项目实施,小组评价,老师点评,课下作业布置。
4.4 过程指导
在项目进行过程中,主要依靠小组集体的力量去解决遇到的难题,通过查阅资料、网络综合学习,锻炼学生的团队合作能力。老师全程进行指导,侧重点放在与学生的技术交流方面,不是主动地告诉学生问题的解决方法,而是引导学生走上正确的技术路线,从而找到问题解决的方法,鼓励学生独立思考,不断完善设计,促进自身的提高。同时成立课下兴趣小组,利用课下时间,对学生进行指导,将课堂学习延续到课下,从而为学生提供更广阔的学习时间和空间。利用好和教材同步开发的课程网站,实现网络交流和学习。
4.5 综合评估
学期结束时,需对完成的项目进行整体的检查与评价。由学生对自己的工作进行评价,小组内部其他成员对该学生进行评价,从而确定学生在项目中的贡献的力量。组长对本小组学期的表现进行总结,包括技术层面和人际交流方面,并就项目进行答辩。老师对每个小组和每个学生进行点评,点评依据来自平时课堂各小组评分表,任务完成情况统计表,考勤表,课堂任务报告书,给每个学生客观公正的评价,并指导学生改正项目开发中遇到的技术问题,给出学生的课程综合成绩。
5 项目驱动教学中取得的成绩
基于Android平台软件开发课程采用项目驱动教学后取得的成绩是显而易见的,首先撰写了一本基于项目驱动教学法的自编教材,该教材以项目为载体,以任务为驱动,设置不同的教学情境,有易到难,有简单到复杂,符合学生的认知规律,受到同学们的欢迎。其次课堂教学转变传统的老师讲,学生听,学生被动接受知识的情况,转为以小组为项目开发单位,小组人员进行任务分工,通过查阅图书资料,利用网络资源进行技术层面交流,学生自助学习,加深对知识的认识和理解能力,锻炼团队合作能力,通过实际项目的开发,学生的动手能力得到提高,每个学生都能完成项目的合作开发,代码编写能力相比传统教学方式有了质的飞跃。最后采用新的考核评估模式,学生不再以试卷论输赢,更侧重于平时课堂的表现,项目的完成情况,小组内部的评价成绩,考核学生的综合能力,不但提高了学生的学习水平,还提高了他们的人际交流能力,文字书写能力。这些都是传统教学中难以取得的成绩。
6 项目驱动教学中注意的问题
在项目驱动教学中也发现了一些问题,需要在以后的教学中进行总结和调整。
6.1 项目驱动教学和传统教学的结合
采用项目驱动教学,并不是简单的把项目交给学生,完全由学生独立自主学习,学生自主学习的是课程中的基础知识,老师在学生自主学习的基础上,对学生没有掌握的项目中的重点和难点知识进行讲解,两者相结合。在对学生进行辅导过程中,也可以适当地就各小组遇到的普遍难点进行讲解,这样可以加速项目开发进程,提高学生掌握知识的效率。
6.2 项目驱动教学和其他教学手段的结合
在项目开发中,任务有易有难,有小有大,教师应具备调整能力,不能采用一成不变的教学方法,这样会让学生感到枯燥,同时也会造成个别学生隐藏在小组成绩之下,得不到锻炼,不利于所有学生学习能力的提高。一个好的教师应根据任务的不同,选择不同的教学方法,合理分配各教学环节的时间,从而激发学生学习的积极性。
6.3 项目驱动教学对老师和学生都提出更高的要求
教师必须具备Android平台下项目开发的能力,具备开发该项目的理论知识和专业技能,具备很强的调控能力,能随时应对学生提出的各种问题。同时要研究和学习多种教学方法,能熟练运用这些教学方法。学生也要改变过去被动的学习习惯,动起来,主动查阅资料,提前预习,主动和小组成员交流,运用多种学习手段和学习载体,并及时总结自己的学习和交流情况。
7 结语
基于项目驱动的教学实施以来,该课程收到了很好的教学效果,学生学习的积极性、主动性得到了提高,学生的动手能力、综合素质得到了很好的锻炼,学生和未来就业的岗位联系的更加紧密,为将来走上社会得下了很好的基础。当然在教学过程中也发现了一些问题,这些都需要在以后的教学过程中认真总结,把这些经验教训更好应用到以后的教学中。
参考文献
[1]罗来俊,郑晖.以案例教学培养计算机网络专业学生的项目实践能力[J].职教论坛,2012,(15):78-80.
[2]汤海蓉,李锡辉.基于项目驱动的JAVA程序设计教学改革[J].教育与职业,2012,(6):140-142.
【android课程学习心得】推荐阅读:
Android应用课程设计题目10-18
android学习overridePendingTransition11-14
android开发总结07-26
android重点总结11-15
Android 输入控件01-05
android面试及答案06-11
Android蓝牙连接总结08-17
Android大作业题目09-09
android年终总结范文02-06
android项目开发报告10-19