1Android基础实训报告学号:20152000000姓名:普班级:中兴订单(1)班日期:2016.12.252目录1、手机音乐播放器介绍………………………………………32、手机音乐播放器功能介绍…………………………………33、手机音乐播放器实现………………………………………54、手机音乐播放器实现演示效果截图与介绍………………105、实训收获………………………………………………1231、手机音乐播放器介绍音乐播放器是一种用于播放各种音乐文件的多媒体播放软件。它涵盖了各种音乐格式的播放工具,比如:MP3播放器,WMA播放器,MP4播放等。它们不仅界面美观,而且操作简单,带你进入一个完美的音乐空间。音乐播放器就是音频解码器的可视化操作界面,其实质是针对各种音频编码格式的解码器。例如ape格式调用的是Monkey'sAudio解码器,flac格式调用的是flac解码器,mp3调用的是lame解码器。大部分音乐播放器都支持多种音乐格式的文件,这是因为这些播放器将不同的音频解码器打包起来,并制作统一的播放界面,从而让使用者能够方便地播放和聆听各种音乐。正因为音乐播放器仅仅是将音频解码器打包,而同一种音频的解码方式又是固定的,因此理论上所有播放器的音质应当是完全相同的,并不存在音质最好的音乐播放器。有些音乐播放器会在解码器的基础上添加DSP插件,对原始的音乐进行转换和扭曲,以迎合人们的喜好(如加强低音或过滤细节),美其名曰优化音质以获得天籁之音,实质却是破坏原本音乐,虽然能够使部分音乐更好听,却也导致另一些音乐音质大打折扣。音乐播放器的人性化界面和扩展性才是各种音乐播放器的特色所在。大部分商业版播放软件往往将界面打造得非常华丽,操作也十分简便,但却缺乏扩展性,支持格式较少。开源播放软件一般能够较4好地进行扩展,支持较多的音乐格式,但往往界面朴素,难以吸引用户。2、手机音乐播放器功能介绍本项目的目的是开发一个可以播放主流的音乐文本格式的播放器。设计的主要实现功能是播放MP3等格式的音乐文件,并且能控制播放,暂停,停止,音量控制,选择上一曲,选择下一曲,歌曲列表文件的管理操作,读取存储卡播放等多种播放控制,界面简明,操作简单。软件系统检测到错误行为时,报告错误,并提示处理操作。音乐播放器播放列表播放界面控制上一首暂停停止下一首退出返回上一级无音乐53、手机音乐播放器实现1.扫描音乐根据流程图可知道音乐播放器第一个界面就是列表扫描音乐,首先在layout中创建songs.xml并添加ListView具体代码如下:ListViewandroid:id=@+id/android:listandroid:layout_width=fill_parentandroid:layout_height=fill_parent/当手机中没有音乐时,让播放列表显示无音乐添加:TextView代码如下:TextViewandroid:id=@id/android:emptyandroid:layout_width=fill_parentandroid:layout_height=fill_parentandroid:textSize=20spandroid:text=@string/no_songs/然后在MusicActivity.java中添加:具体代码教材195页添加后需再加一下代码protectedDialogonCreateDialog(finalintid){Dialogdialog=null;switch(id){caseSHOW_PROGRESS_DIALOG://一个扩展类添加app的图片dialog=newAlertDialog.Builder(this).setIcon(R.drawable.alert_dialog_icon).setTitle(R.string.app_name).setMessage(R.string.scan_media_msg).create();//app图标break;default:break;}returndialog;}6privateCursorallSongs(){if(cursor!=null)returncursor;ContentResolverresolver=getContentResolver();//实现数据的共享cursor=resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,//实现专辑信息null,null,null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);//多媒体库是通过MediaScanner去扫描磁盘文件,对元信息的处理,并通过MediaProvider保存到MediaStore中。//returncursor;}//扫描音乐标志的图片publicbooleanonCreateOptionsMenu(Menumenu){menu.add(0,ITEM_SCAN,0,R.string.scan_media).setIcon(R.drawable.music_scan);returnsuper.onCreateOptionsMenu(menu);}publicbooleanonOptionsItemSelected(MenuItemitem){switch(item.getItemId()){caseITEM_SCAN://扫描整个SD卡上的多媒体文件Intentintent=newIntent(Intent.ACTION_MEDIA_MOUNTED);//Intentintent=newIntent(//android.intent.action.MEDIA_SCANNER_SCAN_FILE);Filefile=Environment.getExternalStorageDirectory();intent.setData(Uri.fromFile(file));sendBroadcast(intent);Log.i(scan,已经进行广播,即将进行扫描。。。。);break;default:break;}returnsuper.onOptionsItemSelected(item);}@OverrideprotectedvoidonPause(){super.onPause();unregisterReceiver(receiver);}7@OverrideprotectedvoidonListItemClick(ListViewl,Viewv,intposition,longid){super.onListItemClick(l,v,position,id);Intenti=newIntent(this,PlayingActivity.class);i.putExtra(position,position);startActivity(i);}}2.播放列表音乐播放器的列表每一行包含了歌曲的标题、歌曲的作者和歌曲的长度等信息,其中歌曲的长度信息按照mm:ss的格式经过了格式化,这与在数据库中存放的毫秒数是不一样的。为了实现这样的布局,编写了/res/layout/songs_list.xml文件。ImageViewandroid:id=@+id/listicon1android:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_centerVertical=trueandroid:layout_alignParentLeft=trueandroid:layout_marginRight=4dipandroid:scaleType=fitCenter/TextViewandroid:id=@+id/titleandroid:layout_width=270dipandroid:layout_height=wrap_contentandroid:includeFontPadding=falseandroid:background=@nullandroid:singleLine=trueandroid:ellipsize=endandroid:textSize=20spandroid:textColor=#FFFFFFandroid:textStyle=normalandroid:textColorHighlight=#FFFF9200android:layout_toRightOf=@+id/listicon1/TextViewandroid:id=@+id/durationandroid:layout_width=wrap_content8android:layout_height=wrap_contentandroid:textSize=14spandroid:textColor=#FF565555android:textStyle=normalandroid:textColorHighlight=#FFFF9200android:background=@nullandroid:scrollHorizontally=trueandroid:layout_alignParentRight=trueandroid:layout_alignParentBottom=true/3.音乐播放当用户单击MusicActivity列表中的歌曲后,MusicActivity会跳转PlayingActivity界面,并在Intent中包含了歌曲在ListView中的position。PlayingActivity从Intent中获得position后,将Cursor定位到歌曲处,从Cursor中读取歌曲在SD卡上的路径开始播放。在plaing.xml中添加四个button和seekbar具体代码教材196页最后定义四个按钮代码197页书中只给了play在添加三个代码,和进度条代码下:privateOnSeekBarChangeListenerseekListener=newOnSeekBarChangeListener(){//定义进度条publicvoidonProgressChanged(SeekBarseekBar,intprogress,booleanfromTouch){if(fromTouch){intmedia=player.getDuration()*progress/1000;player.seekTo(media);}}publicvoidonStartTrackingTouch(SeekBarseekBar){}9publicvoidonStopTrackingTouch(SeekBararg0){}};privatevoidnext(){if(!cursor.moveToNext())cursor.moveToFirst();play();}privatevoidpre(){if(!cursor.moveToPrevious())cursor.moveToLast();play();}privatevoidpause(){if(player.isPlaying()){player.pause();state=PAUSE;}play.setText(R.string.play);}privatevoidstart(){if(state==STOP){try{player.prepare();}catch(IllegalStateExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}elseif(state==PAUSE){player.start();state=PLAYING;}play.setText(R.string.p