【最新资料,WORD文档,可编辑修改】/*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、配置环境变量:(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源文件,自动出来SDK包含的Android版本,点击Apply按钮,完成安装;在用户变量里面,新建一个JA V A_SDK变量,值设置的值为SDK安装的路径;在系统变量里面加入%JA V A_HOME%\bin,%JA V A_SDK%\tools,%JA V A_SDK%\platform-tools。
图1.设置环境变量1.3 Eclipse安装以及ADT工具的安装ADT插件的安装:(1)解压ADT文件;(2)打开eclipse菜单上help 子目录下的Install new software;(3)在弹出的Install窗口中点击Add,在弹出的窗口中,name:ADT Location:点击location按钮找到解压的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.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中装载的一组图片(屏幕底部)中的其中任何一张图片进入相应的功能面板2、通过在MyGallery滑动来达到更改菜单选项的功能3、menuTv会实时显示当前选中的菜单项的详细说明2.3音频文件播放主要控件及功能ImageButton ibtnPlayAndPuase开始/暂停ImageButton ibtnStop停止ImageButton ibtnLast,上一曲ImageButton ibtnNext;下一曲SeekBar MySeekBar;进度条TextView MytvScreen;信息显示TextView tbTimer;用于显示当前播放时间进度使用说明:1、当进入音乐播放界面时,后台读取保存在本地的音乐列表文件,若不存在列表文件则自动扫描/sdcard/Music/目录下音频文件2、播放和暂停键复用,当第一次点击播放按钮,再次点击则为暂停,再次点击则继续之前的位置播放;停止按钮则是将当前播放进度设置为0并暂停播放;上一曲、下一曲按钮则实现歌曲切换功能3、进度条和tbTimer控件则实时显示当前播放音乐的时间进度,MytvScreen会显示当前正在播放歌曲的详细信息2.4视频文件播放主要控件及功能ImageButton ibtnPlayAndPuase开始/暂停ImageButton ibtnStop停止ImageButton ibtnLast,上一曲ImageButton ibtnNext;下一曲SeekBar MySeekBar;进度条VideoView MyVideoView;用于播放视频的组件使用说明:1、当进入视频播放界面时,后台读取保存在本地的视频列表文件,若不存在列表文件则自动扫描/sdcard/Video/目录下音频文件2、播放、暂停、上一部、下一步、停止以及进度条、时间显示条皆复用音乐界面的按钮,功能也与其一致,这里不赘述。
2.5录音主要控件及功能ImageButton ibtnPlayAndPuase开始/暂停ImageButton ibtnStop停止ImageButton ibtnLast,上一曲ImageButton ibtnNext;下一曲SeekBar MySeekBar;进度条Button btnRecording;录音开关使用说明:1、当进入录音界面时,后台读取保存在本地的视频列表文件,若不存在列表文件则自动扫描/sdcard/MyRecords/目录下录音文件2、播放、暂停、上一部、下一步、停止以及进度条、时间显示条皆复用音乐界面的按钮,功能也与其一致,这里不赘述。
3、点击开始录音按钮,则按钮显示为“录音中...”,此时播放等按钮无法使用,进度条中间会显示当前的录音时间。
在次点击此按钮则停止录音。
此时可点击播放按钮试听刚才的录音。
4、以上所有操作在主显示区域都会有文字描述3、软件设计与调试3.1软件在虚拟机上调试及分析核心代码://图片装载i nt MenuImages[]={R.drawable.menu4,R.drawable.menu1,R.drawable.menu2,R.drawable.menu3,R.drawable.menu5};MyGallery.setAdapter(new ImageAdapter(this));public class ImageAdapter extends BaseAdapter{@Overridepublic View getView(int arg0, View arg1, ViewGroup arg2) {// TODO Auto-generated method stubImageView i = new ImageView(mContext);i.setImageResource(MenuImages[arg0]);i.setAdjustViewBounds(true);i.setLayoutParams(new youtParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));return i;}}//页面跳转@Overridepublic boolean onDoubleTap(MotionEvent 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);return false;}播放:MyMediaPlayer.setDataSource(MusicList.get(Mediasp));MyMediaPlayer.prepare();MyMediaPlayer.start();//播放MyMediaPlayer.pause();//暂停MyMediaPlayer.pause();MyMediaPlayer.seekTo(0);//停止(为了能使点击播放按钮能在此播放,这里不调用MyMediaPlayer.stop()方法)MyVideoView.setVideoURI(Uri.parse(VideoList.get(Mediasp)));//设置视频源MyVideoView.start();//播放MyMediaPlayer.pause();//暂停MyVideoView.pause();MyVideoView.seekTo(0);//停止//播放new DateFormat();file=newFile("/sdcard/MyRecords/"+"bear"+DateFormat.format("yyyyMMdd_hhmmss",Calendar.getInstance(Loc ale.CHINA))+".amr");File destDir = new File("/sdcard/MyRecords/");if (!destDir.exists()){destDir.mkdirs();}MyMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);MyMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEF AULT); MyMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEF AULT);file.createNewFile();MyMediaRecorder.setOutputFile(file.getAbsolutePath());MyMediaRecorder.prepare();MyMediaRecorder.start();//停止录音MyMediaRecorder.reset();须加一个权限开发,在AndroidManifest.xml:<uses-permission android:name=></uses-permission><uses-permission android:name=></uses-permission>//1、滑动屏幕改变媒体音量//设置音量MyAudioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);//2、添加屏幕触发事件MyGestureDetector =new GestureDetector(this,new MyGestureDetectorListener());MytvScreen.setOnTouchListener(new OnTouchListener(){@Overridepublic boolean onTouch(View arg0, MotionEvent arg1) {return MyGestureDetector.onTouchEvent(arg1);}});Private class MyGestureDetectorListener implements OnDoubleTapListener{@Override// 滚动,触摸屏按下后移动public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,float arg3) {if(AudioManagerFlag==0){AudioManagerY=arg0.getY();AudioManagerX=arg0.getX();}int IsSound=0;if(AudioManagerFlag>5){AudioManagerFlag=0;if(((AudioManagerY-arg1.getY())<1)||(arg1.getY()-AudioManagerY<1)){if(arg0.getX()>arg1.getX())//左滑动调小音量{MyAudioManager.adjustStreamV olume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_L OWER, AudioManager.FX_FOCUS_NA VIGA TION_UP);}else//右滑动调大音量{MyAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_R AISE,AudioManager.FX_FOCUS_NA VIGATION_UP); }}}else{AudioManagerFlag++;}return false;}3、长按调整至列表界面@Override// 长按,触摸屏按下后既不抬起也不移动,过一段时间后触发public void onLongPress(MotionEvent arg0) {AudioManagerFlag=0;if(MyVideoView.isPlaying()){MyVideoView.pause();ibtnPlayAndPuase.setTag("play");}Intent i=new Intent();i.setClass(MediaPlay.this,MediaList.class);Bundle data=new Bundle();//调出菜单,第一个参数是列表的类型,第二个参数是当前歌曲在播放离别中的位置data.putInt("sp",Mediasp);data.putInt("Type",MyRadioGroup.getCheckedRadioButtonId());i.putExtras(data);startActivityForResult(i,MyRadioGroup.getCheckedRadioButtonId());}}3、列表显示//接收来自功能面板的列表请求Bundle MyBundle=this.getIntent().getExtras();try{int rbtnId=0;rbtnId=MyBundle.getInt("Type");//int Mediasp=MyBundle.getInt("sp");switch(rbtnId){case R.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(MyMediaList,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",MyMediaList,false);sp.setRecordList(MyMediaList);break;default:break;}}//获取列表private void getFiles(String dirpath,String fileType,ArrayList<String> 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 = files[i];if(!f.canRead()) {continue; }if (f.isFile()) {if (f.getName().contains(fileType)) //判断扩展名{List.add(f.getPath()); } }else if (f.isDirectory()&&IsIterative==true)getFiles(f.getPath(), fileType,List, IsIterative); }}//listview长按监听事件mylist.setOnItemLongClickListener(new OnItemLongClickListener(){@SuppressLint("ShowToast")@Overridepublic boolean onItemLongClick(AdapterView<> arg0, View arg1,int arg2, long arg3) {// TODO Auto-generated method stubsetTitle("你点击了第"+arg2+"项");MediaList.this.setResult(resultCode);sp.setMediasp(arg2);//通过全局变量传递参数finish();return false;}});3.2 软件在手机上的测试4、设计总结经过一个多星期的开发,使我从对android从一无所知到现在初入android门槛,这是一个艰辛的过程。