1、- -/*附源码。希望此文能帮助到一些新手。也希望更多的人在网络上分享自己的学习成果。*/1、 开发环境Android 是一种基于 Linux V2.6 核的综合操作环境。最初,Android 的部署目标是移动领域,包括智能和更廉价的翻盖手机。Android 全面的计算效劳和丰富的功能支持完全有能力扩展到移动市场以外。Android 也可以用于其他的平台和应用程序。下面搭建Android的开发环境。1.1 JDK安装1、首先把所有要安装文件放在Android_software文件夹中;2、安装jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008文件;3
2、、配置环境变量:1新建一个用户变量,变量名是JAVA_HOME,变量值为:JDK的安装路径;2查看系统变量Path,如果有显示路径加bin,没有那么加%JAVA_HOME%bin;3查看class,如果有显示路径加lib,没有那么加%JAVA_HOME%lib;4、解压eclipse-jee-juno-win32文件,运行eclipse.exe,在workspace launcher窗口中,设置工程保存路径;1.2 Android SDK安装以及系统设置在eclipse菜单栏的window子菜单下点击perferences,选择android,在右边的对话框中选择按钮Browse,找到SDK源
3、文件,自动出来SDK包含的Android版本,点击Apply按钮,完成安装;在用户变量里面,新建一个JAVA_SDK变量,值设置的值为SDK安装的路径;在系统变量里面参加%JAVA_HOME%bin,%JAVA_SDK%tools,%JAVA_SDK%platform-tools。 图1.设置环境变量1.3 Eclipse安装以及ADT工具的安装ADT插件的安装:1解压ADT文件;2翻开eclipse菜单上help 子目录下的Install new software;3在弹出的Install窗口中点击Add,在弹出的窗口中,name:ADT Location:点击location按钮找到解压的
4、ADT源文件;4安装成功后,重新启动eclipse;1.4 模拟器的配置1、 运行eclipse,在window子菜单下点击AVD Manager开场配置模拟器;2、 在Android Virtual Device Manager 下点击NEW,开场创立模拟器;3、 在create new Android Virtual Manager窗口中,输入模拟器的名称、版本、 存储卡大小,手机屏幕的分辨率,输入完后,点击Create AVD,创立完成;4、 在Android Virtual Device Manager窗口中,选中模拟器后,点击start,启 动模拟器。图2 启动模拟器2、功能说明2.
5、1 软件构造与布局设计布局框架分为三个局部:图形菜单主界面menu_main.xml ,对应类文件MediaPlay.java媒体功能实现界面menu_main.xml menuForMain.java媒体列表界面 mylist.xml以及listview.xml样式布局listtype.xml MediaList.java逻辑架构如下:2.2图像菜单功能主要控件及功能Gallery MyGallery:用于显示图形菜单,双击图片进入相应的功能界面TextView menuTv:用于显示菜单项选择项信息使用说明:1、双击MyGallery中装载的一组图片屏幕底部中的其中任何一图片进入相应的功能
6、面 板2、通过在MyGallery滑动来到达更改菜单项选择项的功能3、menuTv会实时显示当前选中的菜单项的详细说明 2.3 音频文件播放主要控件及功能ImageButton ibtnPlayAndPuase 开场/暂停ImageButton ibtnStop 停顿ImageButton ibtnLast,上一曲ImageButton ibtnNext;下一曲 SeekBar MySeekBar; 进度条TextView MytvScreen;信息显示TextView tbTimer ;用于显示当前播放时间进度使用说明:1、当进入音乐播放界面时,后台读取保存在本地的音乐列表文件,假设不存在列
7、表文件那么自动扫描/sdcard/Music/目录下音频文件2、播放和暂停键复用,当第一次点击播放按钮,再次点击那么为暂停,再次点击那么继续之前的位置播放;停顿按钮那么是将当前播放进度设置为0并暂停播放;上一曲、下一曲按钮那么实现歌曲切换功能3、进度条和tbTimer控件那么实时显示当前播放音乐的时间进度,MytvScreen会显示当前正在播放歌曲的详细信息 2.4 视频文件播放主要控件及功能ImageButton ibtnPlayAndPuase 开场/暂停ImageButton ibtnStop 停顿ImageButton ibtnLast,上一曲ImageButton ibtnNext;
8、下一曲 SeekBar MySeekBar; 进度条VideoView MyVideoView; 用于播放视频的组件使用说明:1、当进入视频播放界面时,后台读取保存在本地的视频列表文件,假设不存在列表文件那么自动扫描/sdcard/Video/目录下音频文件2、播放、暂停、上一部、下一步、停顿以及进度条、时间显示条皆复用音乐界面的按钮,功能也与其一致,这里不赘述。2.5 录音主要控件及功能ImageButton ibtnPlayAndPuase 开场/暂停ImageButton ibtnStop 停顿ImageButton ibtnLast,上一曲ImageButton ibtnNext;下一
9、曲 SeekBar MySeekBar; 进度条Button btnRecording; 录音开关使用说明:1、当进入录音界面时,后台读取保存在本地的视频列表文件,假设不存在列表文件那么自动扫描/sdcard/MyRecords/目录下录音文件2、播放、暂停、上一部、下一步、停顿以及进度条、时间显示条皆复用音乐界面的按钮,功能也与其一致,这里不赘述。3、点击开场录音按钮,那么按钮显示为“录音中.,此时播放等按钮无法使用,进度条中间会显示当前的录音时间。在次点击此按钮那么停顿录音。此时可点击播放按钮试听刚刚的录音。4、以上所有操作在主显示区域都会有文字描述3、软件设计与调试3.1软件在虚拟机上调
10、试及分析3.1.1图形菜单核心代码:/图片装载 int MenuImages=R.drawable.menu4,R.drawable.menu1,R.drawable.menu2,R.drawable.menu3,R.drawable.menu5;MyGallery.setAdapter(new ImageAdapter(this);publicclass ImageAdapter extends BaseAdapterOverridepublic View getView(int arg0, View arg1, ViewGroup arg2) / TODO Auto-generated m
11、ethod stubImageView i = new ImageView(mContext); i.setImageResource(MenuImagesarg0); i.setAdjustViewBounds(true); i.setLayoutParams(newGallery.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);/ i.setBackgroundResource(R.drawable.e);return i;/页面跳转Overridepublicboolean onDoubleTap(M
12、otionEvent arg0) / TODO Auto-generated method stubIntent MyIntent=new Intent();MyIntent.setClass(menuForMain.this,MediaPlay.class);Bundle MyBundle=new Bundle();MyBundle.putInt(name, MyGallery.getSelectedItemPosition();MyIntent.putExtras(MyBundle);startActivity(MyIntent);returnfalse; 3.1.2音乐播放播放:MyMe
13、diaPlayer.setDataSource(MusicList.get(Mediasp);MyMediaPlayer.prepare();MyMediaPlayer.start();/播放MyMediaPlayer.pause();/暂停MyMediaPlayer.pause();MyMediaPlayer.seekTo(0);/停顿(为了能使点击播放按钮能在此播放,这里不调用MyMediaPlayer.stop()方法) 3.1.3视频播放器MyVideoView.setVideoURI(Uri.parse(VideoList.get(Mediasp);/设置视频源MyVideoView
14、.start();/播放MyMediaPlayer.pause();/暂停MyVideoView.pause();MyVideoView.seekTo(0);/停顿3.1.4录音/播放new DateFormat();file=new File(/sdcard/MyRecords/+bear+DateFormat.format(yyyyMMdd_hhmmss,Calendar.getInstance(Locale.CHINA)+.amr);File destDir = new File(/sdcard/MyRecords/);if (!destDir.exists()destDir.mkdir
15、s();MyMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);MyMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);MyMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);file.createNewFile();MyMediaRecorder.setOutputFile(file.getAbsolutePath();MyMediaRecorder.prepare(
16、);MyMediaRecorder.start();/停顿录音MyMediaRecorder.reset();须加一个权限开发,在AndroidManifest.xml:3.1.5、公共方法/1、滑动屏幕改变媒体音量/设置音量MyAudioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);/2、添加屏幕触发事件MyGestureDetector =new GestureDetector(this,new MyGestureDetectorListener(); MytvScreen.setOnTouchL
17、istener(new OnTouchListener()Overridepublic boolean onTouch(View arg0, MotionEvent arg1) return MyGestureDetector.onTouchEvent(arg1););Private class MyGestureDetectorListener implements OnDoubleTapListenerOverride/ 滚动,触摸屏按下后移动 public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,fl
18、oat arg3) if(AudioManagerFlag=0)AudioManagerY=arg0.getY();AudioManagerX=arg0.getX();int IsSound=0;if(AudioManagerFlag5)AudioManagerFlag=0;if(AudioManagerY-arg1.getY()1)|(arg1.getY()-AudioManagerYarg1.getX()/左滑动调小音量MyAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_LOWER,
19、 AudioManager.FX_FOCUS_NAVIGATION_UP);else/右滑动调大音量MyAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_RAISE,AudioManager.FX_FOCUS_NAVIGATION_UP); elseAudioManagerFlag+;return false;3、长按调整至列表界面Override/ 长按,触摸屏按下后既不抬起也不移动,过一段时间后触发 public void onLongPress(MotionEvent arg0) A
20、udioManagerFlag=0;if(MyVideoView.isPlaying()MyVideoView.pause();ibtnPlayAndPuase.setImageResource(R.drawable.ibtnplay);ibtnPlayAndPuase.setTag(play);Intent i=new Intent();i.setClass(MediaPlay.this,MediaList.class);Bundle data=new Bundle();/调出菜单,第一个参数是列表的类型,第二个参数是当前歌曲在播放离别中的位置data.putInt(sp,Mediasp);
21、data.putInt(Type,MyRadioGroup.getCheckedRadioButtonId();i.putExtras(data);startActivityForResult(i,MyRadioGroup.getCheckedRadioButtonId();3、列表显示/接收来自功能面板的列表请求Bundle MyBundle=this.getIntent().getExtras();tryint rbtnId=0;rbtnId=MyBundle.getInt(Type);/intMediasp=MyBundle.getInt(sp);switch(rbtnId)case R
22、.id.rbtnMusic:/MyMediaList=sp.getMusicList();/createList(MyMediaList,0);resultCode=1;getFiles(Filepath+kugou/,.mp3,MyMediaList,true);Filepath+=Music/;getFiles(Filepath,.mp3,MyMediaList,false);sp.setMusicList(MyMediaList);break;case R.id.rbtnVideo:/MyMediaList=sp.getVideoList();/createList(MyMediaLis
23、t,1);resultCode=2;Filepath+=Videos;getFiles(Filepath,.mp4,MyMediaList,false);getFiles(Filepath,.3gp,MyMediaList,false);sp.setVideoList(MyMediaList);break;case R.id.rbtnRecord:/MyMediaList=sp.getRecordList();/createList(MyMediaList,2);resultCode=3;Filepath+=MyRecords;getFiles(Filepath,.amr,MyMediaLis
24、t,false);sp.setRecordList(MyMediaList);break;default:break;/获取列表privatevoid getFiles(String dirpath,String fileType,ArrayList List,boolean IsIterative)/List.clear();File files = new File(dirpath).listFiles(); File f; if(files = null) return; for (int i = 0; i files.length; i+) f = filesi; if(!f.canR
25、ead() continue; if (f.isFile() if (f.getName().contains(fileType) /判断扩展名 List.add(f.getPath(); elseif (f.isDirectory()&IsIterative=true) getFiles(f.getPath(), fileType,List, IsIterative); /listview长按监听事件mylist.setOnItemLongClickListener(new OnItemLongClickListener() SuppressLint(ShowToast)Overridepu
26、blicboolean onItemLongClick(AdapterView arg0, View arg1,int arg2, long arg3) / TODO Auto-generated method stubsetTitle(你点击了第+arg2+项);MediaList.this.setResult(resultCode);sp.setMediasp(arg2);/通过全局变量传递参数finish();returnfalse;);3.2 软件在手机上的测试4、设计总结经过一个多星期的开发,使我从对android从一无所知到现在初入android门槛,这是一个艰辛的过程。但还好之前
27、对C#有一定的功底,使得java语言中关于面向对象的局部都能轻易的理解。只是欠于了解android开发独有的机制以及对eclipce这个软件操作环境的熟识上。这次课设的要做出一个音乐播放、视频播放、录音三个功能于一体的手机软件出来。功能算是比拟简单。但在课设的第一步,控件布局上就屡屡出现问题,最好花了大量的时间才调整好布局,也渐渐找到了elipce关于控件布局操作的规律。当我终于完成了软件的外观布局后,更多的问题接踵而来。比方按钮事件的监听,这里面涉及android的类的继承等,曾一度让我的逻辑出现混沌。后来通过比照C#事件触发机制以及查阅了网络资料才理解了这个东西。关于功能的编程实现上,根本
28、上比拟轻松。除了满足课设根本要求外,我还增加了音量调节、进度条、媒体列表、文件信息显示等功能。但是实现这些功能虽然有完善的逻辑思想,但是比拟对java语法还不甚了解,以至于出现逻辑上没错误,语法出现错误的现象。不过这些问题在之后随着对网络资料的大量查阅一个接着一个解决了。到了课设的最后一天,我的软件根本实现了自己所附加的功能,但通过这次课设,使我深刻的认识到,课设虽然完结,但我的android开发并不会止步。在以后的日子里我还会继续做下去,比方加上歌词同步显示的功能、网络自动搜索歌词的功能。我想,我对android软件开发已经拥有了浓厚的兴趣。这里也确实要感同学以及网络上那些无私奉献的人。5.附录源代码下载:vdisk.weibo./s/z45_CkcauTkKm - - word.zl-