Android开发基本知识总结Android课件_android知识点总结
Android开发基本知识总结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.daodoc.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文件中进行设置,才可以自动拨号: 18.界面之间的数据传递 1.方法1:调用无返回参数 在第一个界面中: Bundle bundle
= new Bundle();bndle.pushString(“name”, “David”);bndle.pushInt(“age”, 22);//pushChar, putShort,put Boolean, pushChar等等
Uri uri = Uri.parse(“http://www.daodoc.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.setCla(FullscreenActivity.this, SecondActivity.cla);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:”);
//得得当前时间 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.sendMeage(msg);//特别注意:此处不能对界面进行更新,因为影响计时精度,所有需要使用Handle配合。见下。} }
4.Handle和Meage的配合使用 Handle handle { public void handleMeage(){ super.handleMeage();//进行其它处理 }
= new Handle()
timetask = new TimerTask()} Meage
msg.what = “******”;handle.sendMeage(msg);
26.线程Thread
1.Thread的定义
public cla ClockThread extends Thread{ @Override public void run(){ //进行其它处理
//注意:不会自动重复执行多次的 } } 2.Thread的启动、延时启动、停止 使用Handle对线程进行控制: msg = new Meage();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){