第一篇:android开发实习报告总结
Android开发实习总结
有一名话叫做:不经过风雨,怎么见彩虹?我想改一下:不真正进入社会,怎能了解社会呢?
在这次实习中,给我收获最大的是我觉得很多工作需要我去摸索和探讨,要不怕吃苦,勇于激流勇进,有的工作虽然单挑又重复,但这是磨练意志最有效的方法,我告诫自己要认真完成,对每项工作都要他看成是公司对自己的一次考核,做到每一件事的过程中遇到困难,一定要争取不抛弃,不放弃,坚持“战斗”,只要希望还在,胜利一定属于我们。
在此次专业实习的过程中,我进入了广州外语通科技有限公司当任Android开发实习生,并参加了两次大项目的研发,从实际到理论,加深了我们对软件技术专业的理解,和对于与社会接轨的深刻感受。
作为学生,我们更多的是课本的知识的理解,理论的优势是我们的特色,但是怎样将理论结合实际却是摆在我们面前的难题。而参观广州外语通科技有限公司正视给了我们直观的解读。广州外语通科技有限公司建立了一整套符合国际标准的质量、成本和交付体系,软件开发质量控制和过程改善能力已达到了国际先进水平,秉承“用开拓的意识、创造新的价值”的企业理念,不断跟踪国际先进技术与管理思想,研发和提供优质软件产品和技术服务,为客户不断创造和提升价值。正是因为秉持这样的理念其完整的价值链和细致的软件服务,给了我们以软件技术专业的具体实际的体验。与此同时,广州外语通科技有限公司企业的参观使我们对中国物流企业的现状有了大概的了解,参观过程中不同仓库的设施和地面的设置的挑选更是让我们多了超出理论的认识。通过指导人员的讲解我们对中国物流企业的信息化有了大致的了解:中国物流企业信息化整体水平不高是其信息化建设的核心问题。这包括:标准不统一,资源浪费严重;大型应用软件系统应用不普遍,应用层次低;现有各软件系统之间相互孤立,形成“信息孤岛”;信息化建设发展不平衡,造成“信息鸿沟”;硬件设备的利用率不高,资源浪费严重;综合信息系统是物流业信息化建设的必然趋势。
如果说前两次的参观实习是给的我们直观的视觉冲突和心理震撼,那么后来的信息化讲座就揭开了信息化和软件技术专业的神秘面纱。通过经验丰富的演讲者的ppt演示我们了解了多个行业的信息化实施过程和具体的商务转变成软件技术专业活动的流程。现实中简单的商务活动一旦设计成成功的xx专业流程将涉及多个业务流程,整体的实施过程是复杂而艰难的。鉴于中国Android专业已经很成熟,各方面的支持还不够很完备,这使得中国Android专业的发展有很大的扩展性。
作为应届毕业生,在毕业前的这次专业实习,无疑是给了我们对Android专业的清晰认识,这也是最为软件技术专业专业的学生的最大感悟。当然实习中还有着更多的感触,包括学习,生活,工作各个方面。
就学习而言,专业实习它更偏重于应用,更加细致,要求也更加严格。作为应届毕业生的我们要想适合自己的工作,在实际中实现自己的理想,必需不断的增加自己的能力,做事情更加专注。
就生活而言,专业学习展示给我们看各个不同的行业的人们的生活,不同行业的人们将自己的行业融入自己的生活,这样大的人群的生活展示给我们未来的生活远景,选择什么样的生活也是我们现在的最重要的抉择。一旦下定决心,也就要开始为自己的生活做准备,胜利是属于有准备的人的。现在的我就要为自己的生活做准备,不断的充实自己。
就工作而言,无疑的本次的xx专业专业实习,展示给我们了多种职业,而作为应届毕业生,择业的选择是大多数人所面对的问题。就我们xx专业而言,面试时常遇见的问题就是“Android专业是干什么的?”或许大多数的学生跟我一样对android专业并没有清晰的概念,所以也并不能很好的回答这样的问题。不管怎样,勤劳的人是让人钦敬的,但所接触的朋友说“多年的工作让我清楚这个社会的运转不是控制在辛勤劳动的人手上,而是那一班根深帝固的政治家、资本家手中...工作中的认真负责不是为了讨好表现,而是为了要冶练自己的品性,是在为自己,不是为老板”。
上面的认识都是正面的,也是自己受益的主要部分,但就个人而言,本次的xx专业实习更多的是让自己认识到自己的不足。作为一个即将毕业的应届生,通过此次的实习,更多的是对大学四年的回顾和反省。进入了社会,和学校的感觉是完全不一样的。只有在刚进入公司的一个月里,大家还把你当作新人,时间久了公司的领导就把你与其它同事相比较;当你开始跑客户时,客户把你与做了很多年的销售相比较,没人把再把你当新人看待,而你把你当作一个正式的有能力的人使用。
看着那些员工忙忙碌碌的来来去去,坚定的态度是那么一点一滴在铸就起来,一个被人认可的人首先一定是一个认真负责的人,一个认真负责的人无论到哪里都可以站得正。相对于经验和技术而言,这些都是可以积累的,可以日久能熟的,但是否能有正确的态度却是因人而异的,有的人永远让人感觉畏锁。我从来没有把现在的工作当作实习,我就是认定我是在工作,而不是来学习东西的。我是为工作而学习,学习是为了把工作做得更好。
总的来说,我们这一次实习是比较成功的,大家都能学习到了很多在校园、在课堂上、课本上学不到的东西,也了解很多和懂得了做人的道理,特别是体会到生活中的艰辛和找工作的不容易。
感谢这次实习,感谢这次实习的教师,感谢为我们争取了这实习机会的领导。这次实习,一定会令我的人生走向新一页!
XXX
2016-01-08
第二篇:Android项目开发总结
项目开发总结报告
1引言
1.1编写目的
总结开发经验与学习中的不足
1.2背景
以方便用户记录日常学习心得,生活体会为目的,进行主题为“随心笔记”的应用开发
2实际开发结果
2.1产品
2.2主要功能和性能
能够查看笔记的目录,记录笔记完成时间。能够改变主题颜色,目录排版方式,拥有简洁的主题。对于涂鸦功能,插入图片,密码锁等功能未能实现。
3开发工作评价
3.1对产品质量的评价
本应用拥有简单实用的功能,能够满足一般用户的需要
3.3对技术方法的评价
开发中使用了软件工程中的增量开发模型,黑盒测试等技术,使开发逐步向前发展
3.4出错原因的分析
对于部分Android版本支持性不好,不能正常使用安装等
4经验与教训
通过这次开发,我们体验了开发不易,需要很多人员的合作。开发过程中,必须明确整体目标,不能东一榔头,西一棒槌。另外由于学习时间短,对很多东西都不太了解,还好通过CSDN等一些网站能够找到有益的帮助,感谢那些博客,论坛。
第三篇:android实习报告
实习报告
实习目的:
生产实习是计算机科学与技术专业重要的实践性教学活动,其目的是使学生们进一步加深对所学知识的理解,理论联系实际,巩固所学有关计算机基础理论知识和基本技能,学习有关计算机最新技术方面的应用,增强学生对计算机在社会生活,社会生产中应用的感性认识,深入了解计算机在各个领域中的应用状况,学生在实习的同时,进行一定的社会实践与调查活动,对于提高学生的综合能力和全面素质具有重要意义。
实习内容:
Android主要有四大组件,分别为:Activity 活动、Service 服务、Broadcast receivers 广播接受者、Content Provider 内容提供者。还有上激活组件Intent。
1.Activity
Activity就是一个用户可以直接接触并看到的窗口,当新建一个Android Project后可以
看到在工程文件下的src中有一个已建好的java类FirstActivity,系统也会自动为他配备一个布局文件main.xml,并在AndroidManifest中对此Activity进行注册。
用户想要自己创建一个Activity,首先创建一个java类继承自Activity,可以为他配备一个布局文件用来显示Activity创建后的布局。最后在主配置文件manifest.xml中对创建的Activity进行注册,这一步是必不可少的,没有注册Activity无法运行。
在manifest.xml中会有许多的Activity,但系统一次只能运行一个Activity,因此必须修选定一个最先运行的Activity。在注册Activity是加入
可指定当前的Activity为主Activity最先被执行。其他Activity可借助激活组件Intent
进行启动。通过Intent还可实现来了两个Activity之间传递数据
Activity具有生命周期,他有三种状态:运行状态、暂停信息和停止状态。运行态是在屏幕台前位于当前任务堆栈的顶部,即获取焦点的Activity。暂停信息是指失去了焦点但对于用户仍可见,此状态下当程序处于低内存是仍有可能被消除。停止状态是指完全被另一个Activity覆盖,但他仍然保留所有的信息与状态。
2.Android图形设计UI
Android UI控件一般写在布局文件中,此次实习所学控件主要有:TextView,EditText
Button、AlertDialog、RadioButton、CheckBox、Spinner和TableRow等。将这些控件及相应的属性写在layout下的布局文件中就可在与其绑定的Activity中显示相应的对话框,文本框,按钮等。
Android的界面布局是为了使控件能够更友好的呈现在用户的眼中。主要有:绝对布局Absolutelayout、线形布局LinearLayout、框架布局FramLayout、相对布局RelativeLayout和
表格布局TableLayout。其中框架布局适合于单张图片的显示。
3.Service 服务
Service事实运行在后台的一段代码。他与Activity一样有相似的生命周期,但不同的是他不能自己运行,必须通过某一个Activity或者其他的Context对象来调用。
Service可通过调用Context.StartService()启动,还可以通过ServiceConnection来访问Service。可以将其他的组件绑定到Service上。
4.数据存储
Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的。
openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/”,如果文件不存在,Android 会自动创建它。创建的文件保存在/data/data/
/files目录,如: /data/data/cn.itcast.action/files/itcast.txt,通过点击Eclipse菜单“Window”-“Show View”-“Other”,在对话窗口中展开android文件夹,选择下面的File Explorer视图,然后在File Explorer视图中展开/data/data/
/files目录就可以看到该文件。
openFileOutput()方法的第二参数用于指定操作模式,有四种模式android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data/
/files),其他程序无法访问。除非在创建时指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE,只有这样其他程序才能正确访问。
实习流程:
2月18——2月27日,老师对于ANDROID开发进行了详细的讲解,其内容包括:ANDROID 的背景介绍,发展过程,自身的优势与不足.Android的控件、布局、Activity、Service等一系列基础知识,对整个Android的开发有了大致的了解
2月28日——3月2日: 学生自己开发ANDROID 3GABS项目,老师答疑及验收
实习心得:
时间过的飞快,半个月的实习就要结束了,在这次实习中我们不仅学习了相关的专业知识而且让我对Android系统又有了一个更加深入的了解,它也是我们计算机专业的一个新的方向并且发展很迅速,为了今后的发展我们还需不断努力学习!我国的信息产业还很落后,随着社会的发展和国家的支持,手机上网是社会发展的趋势,到时候手机上网将无处不在!之前我对Android系统的了解之停留在应用的层次上,对于更深层次的了解是很少的,通过这次实习,让我对Android系统有了一个更深层次的了解,同时它页使我意识到无论朝哪个方向发展,主要还是要扎实深刻地学习,同时也得不断努力探索!
IT业发展速度一直都是相当惊人的,不想被社会淘汰,我们就得必须不断地学习,现在的社会不再是一劳永逸,其他行业也是如此,我们必须不断地拿知识来武装自己,不然被淘汰那是肯定的!现在就业难原因其实在于竞争的家具,为了在竞争中得到成功,我们必须时时刻刻学习,还学到了很多做人做事的道理,不仅懂得了要想在计算机这一行立足必须具备扎实的技术理论知识,还必须学会与人沟通,合作的能力,同时更懂得了尝试的重要性,很多事情不是听说是困难的它就是困难的,只有亲自去做亲自去体会才知道,其实它并没有那么困难,这就是实践的重要性!无论做什么事情都必须要坚持,只有坚持下去,才会成功!事在人为,就怕不做!我们不能怕失败,关键是要从失败中总结经验,带着勇气,带着自信,坚持不懈,踏踏实实。这一次的实习是短暂的,但我收获良多。回顾以前所走过的路,太多的无奈和迷茫,这次实习就像是我人生道路上的航标,为我指明了前景的方向,是我对自己的前途充满了信心,我不仅知道了在人生的岔道口更适合朝哪个方向前进!更知道了在今后的道路上怎么去武装自己!
实习结果:
第四篇:Android操作系统应用开发报告
Android操作系统应用开发报告
项目名称: 作
者: 学
号: 完成时间:1.开发目的
本次应用开发的预期目的及相关功能介绍。
2.程序系统
对所开发程序系统的介绍,包括总体结构,程序系统中各个程序或函数的名称及其介绍,他们之间的层次关系。
3.主要功能
说明所开发程序系统具有的实际功能。
4.基本流程
用图给出所开发程序系统的实际处理流程。
5.出错原因分析
给出开发过程中出现错误的原因分析。
6.开发心得
列出本次课程开发工作中所得到的经验与教训,以及心得体会。
第五篇:Android开发基本知识总结-Android课件
Android开发基础教程
2015-4-13周一2CJ02 目录
1.什么是Android? 2.Android应用开发环境 3.Gradle 4.模拟器Emulator 5.开发一个安卓应用程序的步骤 6.关于多个模拟器的问题 7.安卓工程文件的结构 8.android界面文件---xml文件 9.android程序文件---java文件 10.界面布局方式 11.几个常用组件 12.Roast组件 13.对话框AlertDialog 14.几条重要的语句 15.监听器Listener 16.识别响应事件的组件 17.界面切换
18.界面之间的数据传递 19.Activity生命周期 20.多媒体播放
21.日志文件在程序调试中的使用 22.使用XML文件保存数据
23.使用TXT文件保存数据 24.使用数据库保存数据 25.时间组件 26.线程Thread 27.视频播放VideoView 28.MediaPlayer,SurfaceView和SurfaceHolder播放视频 29.录制音频MediaRecorder 30.菜单组件
1.什么是Android? 移动设备(常常指手机mobile)的操作系统,由google公司出品,是免费的, 最早是基于Linux平台的;目前已经推出的Android3.0是平板电脑上的操作系统。
其它的手机操作系统有:iPhone系统等。
手机厂商:三星(Samsung,宏达电(HTC),摩托罗拉(Motorola),华硕,索尼,Garmin等都支持iPhone系统。
Android系统功能:自定义用户界面,支持蓝牙,多点触摸,具有导航功能和语音识别功能,结合了google地图。
Android软件开发工具SDK
4.0。
Android系统特点:虚拟键盘,以WebKit为核心的WebView组件,可以使用HTML, javascript等。
2.Android应用开发环境 Eclipse+ADT+Android SDK。ADT---Android开发工具插件(Android Plugs for Eclipse).开发环境安装注意事项:关闭防毒软件,按顺序安装,保持网络畅通,比较耗时。特别说明,安装和运行需要高配置机器和高速网络,比较费时。
(1)安装Java
JDK。甲骨文
网站: http://www.xiexiebang.com ”);Intent in = new Intent(Intent.ACTIN_VIEW, uri);startActivity(in);(2)调用系统拨号界面
Uri uri = Uri.parse(“tel:*** ”);Intent in = new Intent(Intent.ACTIN_DIAL, uri);startActivity(in);(3)调用系统拨号功能
Uri uri = Uri.parse(“tel:*** ”);Intent in = new Intent(Intent.ACTIN_CALL, uri);startActivity(in);注意:需要在AndroidManifest.xml文件中进行设置,才可以自动拨号:
= new Bundle();bndle.pushString(“name”, “David”);bndle.pushInt(“age”, 22);//pushChar, putShort,put Boolean, pushChar等等
Uri uri = Uri.parse(“http://www.xiexiebang.com ”);Intent in = new Intent(Intent.ACTIN_VIEW, uri);in.putExtras(bundle);startActivity(in);在第二个界面中: Intent in = this.get Intent();Bundle bundle
= in.getExtras();String studentName = bundle.getInt();//getDouble, 2.方法2:调用有返回参数 例1,在第一个界面中: private static final int ACTIVITY_EDIT = 1;Bundle bundle = new Bundle();bundle.pushString(“name”, “David”);Intent in = new Intent();
getShort, getIntArray等 in.putExtras(bundle);in.setClass(FullscreenActivity.this, SecondActivity.class);startActivityForResult(in, ACTIVITY_EDIT);注意:startActivityForResult后所有语句无效,不执行;在第一个界面中,第二个界面可以在不同位置被多次调用;在第一个界面中,在其它位置可以调用其它界面。
在第一个界面中,重写onActivityResult,接收所有被调用界面返回的参数(如果有):@Override protected void onActivityResult(int
requestCode,int resultCode,Intent
data){ super.onActivityResult(requestCode, resultCode, data);if(requestCode== ACTIVITY_EDIT)
//此参数可以区分不同的调用
{
Bundle bundle = data.getExtras();if(resultCode == RESULT_OK)
//此参数可以判断有无返回参数
{
Bundle bundle = data.getExtras();……
} if
(resultCode == RESULT_CANCELED)
{ } }
…… } ……
问题
:如何判断被调用界面是否传递返回参数?如何区分返回参数是由不同的被调用界面传递的?android的这种解决方法并不是完美的。例2,在第二个界面中:
读取第一个界面传递的参数,省略;下面是向调用程序传递返回参数: Bundle bundle
= new Bundle();bndle.pushString(“name”, “贺昌峰373780592”);Intent
setResult(RESULT_CANCELED);//传递参数返回
// 或setResult(RESULT_OK, in);//不传递参数返回 finish();注意:这时,第二个界面返回到第一个界面,可以不传递参数直接返回(RESULT_CANCELED),in = new Intent();
in.putExtras(bundle);也可以传递参数返回(RESULT_OK)。19.Activity生命周期
onCreate
---onStart
---onResume
---onPause---onStop
---onDestroy 也就是说,有: protected void oncreate(…){ ….} protected void onStart(…){ ….} protected void onResume(…){ ….} protected void onPause(…){
….} protected void onStop(…){ ….} protected
void onDestroy(…){ ….} 20.多媒体播放MediaPlayer public MediaPlayer player = new MediaPlayer();//生成语句可省略 try{ player.reset();
//重新播放音乐
player.setDataSource(“/sdcard/music/music_file_name.mp3”);
// player = MediaPlayer.create(getApplicationContext(), R.raw.music);
// 打开音乐文件
//music为音乐资源文件
player.prepare();player.start();
// player.isPlaying()
//准备播放 //播放音乐
//判断是否正在播放
//音乐播放完成触发事件
player.setOnCompletionListener(new OnCompletionListener){ public void onCompletion(){ //音乐播放完成后,处理代码 } }
player.pause();player.start();player.stop();
} catch(IllegalStateException e){ ……} catch(IOException e){ ……}
//播放暂停 //继续播放音乐 //停止播放音乐 player.release();
//释放存储空间
//注意:可以播放存储卡上任意一个音乐文件;也可以播放资源列表中的音乐文件 21.日志文件在程序调试中的使用
import android.util.Log;对应的方法有:debug,verbose,info,warn,error。注意,使用简写。问题:如何查看系统日志文件?
Log.d(“这里是分类标签”, “这里是输出信息”);22.使用XML文件保存数据
对XML文件进行操作,形式为(key,value)。SharedPreferences
sp = get SharedPreferences(文件名,权限);
权限:MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE 例:
//1打开XML文件 SharedPreferences
//2更改数据
Editor editor = sp.eidt();
//更改数据
sp = get SharedPreferences(“myconfig”,MODE_PRIVATE);
editor.putString(“name”, “贺昌峰373780592”);editor.putInt(“age”, 48);editor.putFloat(“salary”, 2048.5);//putLong,putBoolean等;
editor.commit();
//保存数据
//3读取数据
String myname = sp.getString(“name”, “”);
//4删除数据
editor.remove(“name”);//删除数据 editor.commit();
editor.clear();//删除全部数据 editor.commit();
//5简写形式如下: Editor editor = sp.eidt()
//更改数据
//读取数据
.putString(“name”,.commit();
“贺昌峰”)23.使用TXT文件保存数据 FileOutPutStream
fout = openFileOutput(文件名, 文件权限);文件权限: MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE
1.在文件中写入数据
try { //打开TXT文件 FileOutPutStream
BufferedOutputStream
String
//向文件中写入数据
bufferoutput.write(s.getBytes());s = “大家跟我学习android”;
bufferoutput = new BufferedOutputStream(fout);fout = openFileOutput(“myconfig.txt”, MODE_PRIVATE);
//关闭文件 bufferoutput.close();fout.close();} Catch(Exception e){
2.从文件中读取数据
try { FileInputStream
BufferedInputStream
byte[] bufferbytes = new byte[20];int flag = bufferoutput.read(bufferbytes);if(flag==-1){ //文件读取到文件末尾,否则可以继续读出
}
//仅读取长度为20个字节的数据
bufferoutput = new BufferedInputStream(fout);
fout = openFileInput(“myconfig.txt”);
//打开文件
e.printStackTrace();} bufferoutput.close();fout.close();} Catch(Exception e){
24.使用数据库保存数据 1.数据库相关类
//关闭缓冲区 //关闭文件
e.printStackTrace();} import android.content.ContentValues;import android.content.Context;import android.database.Coursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;
2.SQLiteDataBase类
注意:数据库操作时,要求捕获异常,此处省略。
SQLiteDataBase db = openOrCreateDatabase(“databasename.db”, MODE_PRIVATE);//说明:数据库权限同文件权限
// Context就是this指针 db.execSQL(sql_exp): 执行SQL语句
Cursor cs = db.rawQuery(select_exp, null): 返回数据集。Cursor cs1 = db.query(arg0, ……): 使用较繁琐,可用rawQuery替换。
db.insert(arg0, ……): 使用较繁琐,可用rawQuery替换。db.delete(arg0, ……): 使用较繁琐,可用rawQuery替换。db.update(arg0, ……):
使用较繁琐,可用rawQuery替换
db.close(): 一般写在onDestroy事件中。3.Cursor类 方法有:
move, moveToPosition, moveToFirst, moveToLast,moveToNext, getCount(), getInt(),getString(),isNull(), isFirst()等等。
4.ContentValues类
一般用在SQLiteDataBase.insert中, 此处省略。
ContentValues content
= new ContentValues();
content.put(“name”, “贺昌峰”);
moveToPrevious, content.put(“age”, 48);5.SimpleCursorAdapter类
SimpleCursorAdapter是界面组件如ListView和Cursor的桥梁。例, 在ListView组件listview1中,显示数据集(有绑定功能吗?):
Cursor cs = db.rawQuery(“select SimpleCursorAdapter
adapter
* from table”, null);
= new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2, new String[]{“id”, “name”}, new int[]{ android.R.id.text1, android.R.id.text2});// 注意:第2个参数的作用
listview1.setAdapter(cs);
//在ListView组件显示数据集
25.时间组件
1.常用组件AnalogClock,DigitClock 用法比较简单,无需过多设置,仅仅显示当前时间:机械式,数字式
2.计时组件:Chronometer 常用方法:start开始计时, stop停止计时, setBase设置时间 setFormat(“秒表:%s”):设置组件时间显示格式。
附:与时间格式有关的函数 SimpleDateFormat String
sformat = new SimpleDateFormats(“hh:mm:ss”);
//得得当前时间 s = sformat.format(new Date());
例,Chronometer对象是chroTime: chroTime.setOnChronometerTickListeter(chrolisteten);
private Chronometer.onChronometerTickListeter Chronometer.onChronometerTickListeter(){ @Override public
void OnChronometerTickListeter(Chronometer chronomoter){ //每秒执行一次该方法 } }
3.计时组件Timer和TimerTask
chrolisteten = new 常用函数:schedule(TimerTask对象, Timer对象延迟时间, TimerTask对象间隔时间);
TimerTask对象用法: private TimerTask { public void run(){ //按设定间隔调用执行 handle.sendMessage(msg);//特别注意:此处不能对界面进行更新,因为影响计时精度,所有需要使用Handle配合。见下。} }
4.Handle和Message的配合使用 Handle handle { public void handleMessage(){ super.handleMessage();//进行其它处理 }
= new Handle()
timetask = new TimerTask()} Message
msg.what = “******”;handle.sendMessage(msg);
26.线程Thread
1.Thread的定义
public class ClockThread extends Thread{ @Override public void run(){ //进行其它处理
//注意:不会自动重复执行多次的 } } 2.Thread的启动、延时启动、停止 使用Handle对线程进行控制: msg = new Message();Handle handle = new Handle();
ClockThread clock = new ClockThread();
handle.post(clock);
//启动线程 5000);
//延时5000ms启动线程 //停止线程 handle.postDelayed(clock, handle.removeCallbacks(clock);
问题:使用Handle有什么优点? 27.视频播放VideoView 支持的文件格式:H.264的mp4, wmv, 3gp等。1.视频播放
private VideoView
videoview.setVideoPath(“/sdcard/robot.mp4”);//增加控制面板
videoview.setMediaController(new MediaController(getApplicationContext()));
videoview
= new VideoView();videoview.start();//开始播放
2.视频准备播放事件
videoview.setOnPreparedListener(videoPreparedListener);videoview.setOnCompletionListener(videoCompletionListener);
private MediaPlayer.onPreparedListener videoPreparedListener = new MediaPlayer.onPreparedListener(){ @Override public
void onPrepared(MediaPlayer
mp){ //视频准备播放 } }
3.视频播放完成事件
private MediaPlayer.onCompletionListener videoCompletionListener = MediaPlayer.onCompletionListener(){ @Override public
void onCompletion(MediaPlayer
mp){
new //视频播放完成 } }
28.MediaPlayer,SurfaceView和SurfaceHolder播放视频
MediaPlayer也可以播放视频,需要SurfaceView和SurfaceHolder配合,其中SurfaceView为可视化组件可以播放视频,SurfaceHolder为桥梁。
private SurfaceView surfview = new SurfaceView();//此组件可视化设计,无需这里声明 private MediaPlayer
surfholder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaplayer.setDisplay(surfholder);
mediaplayer.setDataSource(“/sdcard/vedio.mp4”);mediaplayer.reset();
//打开视频文件
mediaplayer = new MediaPlayer();
= surfview.getHolder();private SurfaceHolder surfholder
//重新播放视频 mediaplayer.prepare();mediaplayer.start();mediaplayer.stop();mediaplayer.release();
//准备播放视频 //播放视频
29.录制音频MediaRecorder MediaRecorder
mediaRecorder.SetAudioSource(MediaRecorder.AudioSource.MIC);mediaRecorder.SetAudioEncode(MediaRecorder.AudioEncode.DEFAULT);mediaRecorder.SetOutputFormat(MediaRecorder.OutputFormat.DEFAULT);mediaRecorder.SetOutputFile(“/sdcard/recorder.amr”);mediaRecorder.prepare();mediaRecorder.start();
注意:要有写入SD卡的权限,在AndroidManifest.xml文件中:
//准备录音 //开始录音
mediaRecorder = new MediaRecorder(); :
1.附1:ImageView.setAlpha(50)的含义?设置透明色 2.附2:遍历目录下所有文件: private File pathfile;pathfile = Environment.getExternalStorageDirectory();
//疑问:pathfile + ”/myfilename.txt” 这个用法正确吗? for(File file: pathfile.listFiles()){ if {(file.getName().toLowerCase().endsWith(“.amr”))……
// File.getAbsolutePath(), File.getName()的区别 } } 30.菜单组件 //添加系统菜单 protected protected static final int MENU_ABOUT
= Menu.FIRST;static final int MENU_QUIT = Menu.FIRST + 1;
//得到SD卡路经 protected
@Override static final int MENU_EDIT = Menu.FIRST + 2;public boolean onCreateOptionsMenu(Menu menu){ menu.add(0,MENU_ABOUT,0,“关于本软件...”).setShortcut('0','A');
menu.add(0,MENU_QUIT,1,“结束”).setShortcut('1','E');
menu.add(0,MENU_EDIT,2,“编辑”).setShortcut('2','D');
menu.add(0,MENU_FILE,3,“文件”).setShortcut('3','F');
return super.onCreateOptionsMenu(menu);} //添加菜单响应事件 @Override public boolean onOptionsItemSelected(MenuItem switch(item.getItemId()){ case MENU_ABOUT: // 响应处理 break;case MENU_QUIT: // 响应处理 break;}
return super.onOptionsItemSelected(item);}
//添加快捷菜单 protected static final int MENU_BACKCOLOR protected static final int MENU_SMALLSIZE =
item){
= Menu.FIRST;
Menu.FIRST + 1;//定义快捷菜单组件 private LinearLayout private TextView
layout;
txtview1,txtview2;在onCreate中, 增加以下语句: layout =(LinearLayout)findViewById(R.id.layout);txtview1 =(TextView)findViewById(R.id.txtview1);txtview2 =(TextView)findViewById(R.id.txtview2);registerForContextMenu(txtview1);registerForContextMenu(txtview2);
在java文件类中, 增加以下语句: @Override public boolean onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){ //注意:父类函数先调用,或最后调用? super.onCreateOptionsMenu(menu, v, menuInfo);
if(v == txtview1)menu.add(0, MENU_BACKCOLOR,0,“设置背景颜色”); if(v == txtview2)menu.add(0, MENU_SMALLSIZE,1,“较小字体”);
}
//添加菜单响应事件 @Override public boolean onContextItemSelected(MenuItem switch(item.getItemId()){ case MENU_BACKCOLOR: // 响应处理
layout.setBackgroundColor(Color.BLUE);break;case MENU_SMALLSIZE: // 响应处理
txtview2.setTextSize(12);break;}
return super.onContextItemSelected(item);}
item){