本文简介媒体包提供了可管理各种媒体类型的类。这些类可提供用于执行音频和视频操作。除了基本操作之外,还可提供铃声管理、脸部识别以及音频路由控制。本文说明了音频和视频操作。范围:本文旨在针对希望简单了解Android编程的初学者而设计。本文将指导你逐步开发使用媒体(音频和视频)的应用程序。本文假定你已安装了可开发应用程序的Android和必要的工具,同时还假定你已熟悉Java或掌握面向对象的编程概念。如欲查询更多有关Android的详情,请参阅三星移动创新者园地(SMI)知识库网站。=1简介通过“android.media”包支持音频和视频操作。除了基本操作之外,还可以提供用于铃声管理、脸部识别以及音频路由控制的各种类。Android通过MediaPlayer类支持播放音频和视频。MediaPlayer类处于Androidmedia包的核心位置。除了MediaPlayer类之外,SoundPool和JetPlayer类也可提供用来播放音频文件。播放音频文件MediaPlayer是播放媒体文件最为广泛使用的类。MediaPlayer已设计用来播放大容量的音频文件以及同样可支持播放操作(停止、开始、暂停等)和查找操作的流媒体。其还可支持与媒体操作相关的监听器。通过以下方式可完成播放MediaPlayer中的音频和视频:·从源文件播放。·从文件系统播放。·从流媒体播放。MediaPlayer监听器定义了部分监听器,如OnCompletionListener、OnPrepareListener、OnErrorListener、OnBufferingUpdateListener、OnInfoListener,OnVideoSizeChangedListener和OnSeekCompleteListener。当在播放过程中到达媒体源末端时,可调用OnCompletionListeneronCompletion(MediaPlayermp)事件。你也可使用监听器事件来从列表中播放下一首歌曲或释放媒体播放器对象。当准备播放媒体源时,将可调用OnPrepareListeneronPrepared(MediaPlayermp)事件。你可以开始播放onPrepared()方法中的歌曲。当在异步操作过程中出现错误时(其他错误将在调用方法时抛出异常),将可调用OnErrorListenerbooleanonError(MediaPlayermp,intwhat,intextra)事件。参数what指明了已发生错误的类型。这可能为MEDIA_ERROR_UNKNOWNorMEDIA_ERROR_SERVER_DIED。参数extra指明了与错误相关的附加信息。从res播放音频这是播放音频文件最普通的方法。在此情况下,音频文件应存在于该项目的raw或assets文件夹中,如图1中所示。如欲访问一个原资源,仅需使用无扩展名的小写文件名称:contextappContext=getApplicationContext();MediaPlayermMediaPlayer=MediaPlayer.create(appContext,R.raw.samplemp3);mMediaPlayer.start();或MediaPlayermMediaPlayer=MediaPlayer.create(this,R.raw.samplemp3);mMediaPlayer.start();如欲停止播放,调用stop()。如果你希望重播该媒体,则须在再次调用start()之前reset()(重置())并prepare()(准备())该MediaPlayer对象。(create()首次调用prepare()。)如欲暂停播放,调用pause()。使用start()可从你已暂停的地方恢复播放。从文件系统播放音频访问音频文件的第二种方法是从文件系统,即SD卡。大多数音频资源均存在于SD卡中。在研究如何通过SD卡访问音频文件之前,让我们看一下如何在SD卡中加载文件。通过窗口显示视图其他,可打开EclipseIDE中的FileExplorer视图。其将打开显示视图。如图2中所示,选择AndroidFileExplorer。一旦选择FileExplorer(文件管理器),即将会打开FileExplorer视图,如图3所示。现在,可将文件推入SD卡中,在FileExplorer中选择sdcard文件夹,并使用位于右上角的右箭头来选择按钮。此操作可开启对话框,可使你选择文件。选择你所需上传至SD卡中的文件。将文件推入SD卡中后,如图4中显示了可用的内容。通过以下方式来从SD卡访问文件StringpathToFile=/sdcard/samplemp3.mp3;//createmediaplayermediaPlayer=newMediaPlayer();//setaudiofilepathtry{mediaPlayer.setDataSource(pathToFile);}catch(IllegalArgumentExceptione){e.printStackTrace();}catch(IllegalStateExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}//Preparemediaplayertry{mediaPlayer.prepare();}catch(IllegalStateExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}//startmediaPlayermediaPlayer.start();首先,创建一个新的MediaPlayer实例。其次,将待播放的音频文件(文件路径)设置为MediaPlayer实例的数据源。在播放器开始播放歌曲之前,必须准备好MediaPlayer对象。prepare()方法为阻塞方法,并可阻塞直至媒体播放器准备播放歌曲。非阻塞方法prepareAsync()也可进行提供。如果媒体播放器用来从流媒体中播放歌曲,并且在播放歌曲之前需要缓冲数据,则应使用非阻塞prepare方法。现在使用以下内容来播放控制方法,如Start()、stop()等。在可设置用于部分其他歌曲文件之前,媒体播放器对象须进行重置。媒体播放器在其使用后须予以释放。此操作使用release()方法来完成。Release()方法可释放与MediaPlayer对象相关联的资源。当你使用MediaPlayer来完成操作时,这被认为是调用此方法的最佳实践。我们也可通过以下方式来创建媒体播放器StringpathToFile=/sdcard/samplemp3.mp3;MediaPlayerfilePlayer=MediaPlayer.create(appContext,Uri.parse(pathToFile));此处可通过解析给定的已编译URI字符串来使用URI类创建Uri。从网页播放音频使用与用于访问SD卡中存有的音频文件的相同代码,可完成访问网站中的音频文件。唯一的变化就是文件路径。此处的路径将为网站URL,其指向音频资源文件。此处最重要的部分就是使用互联网提取数据,因此必须获取访问互联网的许可。在AndroidManifest.xml文件中设置互联网许可uses-permissionandroid:name=android.permission.INTERNET/uses-permission除了URL路径外,该代码保持相同StringurlPath=http:/…/samplemp3.mp3;//createnewmediaplayermediaPlayer=newMediaPlayer();//setaudiofilepathtry{mediaPlayer.setDataSource(urlPath);}catch(IllegalArgumentExceptione){e.printStackTrace();}catch(IllegalStateExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}//Preparemediaplayertry{mediaPlayer.prepare();}catch(IllegalStateExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}//StartmediaplayermediaPlayer.start();或者,我们也可通过以下方式创建媒体播放器StringurlPath=http:/…/samplemp3.mp3;MediaPlayerfilePlayer=MediaPlayer.create(appContext,Uri.parse(urlPath));此处可通过解析给定的已编译URI字符串来使用URI类创建Uri。类与MediaPlayer类相对。该类设计用于快速播放一套预先定义的相对较短的声音示例。它是示例的集合,这些示例可从APK内部的资源或从文件系统的文件载入内存中。最典型的用例是在要求低延时的游戏中的音效池。除了预先加载和播放声音等基本操作外,SoundPool类还支持以下功能:SoundPoolSoundPool·设置可同时播放的最高的声音数·优先处理声音,以便达到最大极限时将会减弱优先级别低的声音·在完成播放之前暂停和停止声音·循环声音·更改播放速率(实际上是指每个声音音调)·设置立体声音量(左声道和右声道不同)如图1所示,通过SoundPool类使用.ogg文件来播放音频文件。以下代码片段说明了SoundPool类的用法。privateintBIG_WAVE=1;/*InitializeSoundPool1–numberofsoundsthatwillbeloaded.AudioManager.STREAM_MUSIC-Streamtype0–Qualityofthesound.Currentlynoeffect*/SoundPoolsoundPool=newSoundPool(1,AudioManager.STREAM_MUSIC,0);//CreateHashMapHashMapsoundPoolMap=newHashMap();//CreateAudioManagerAudioManagermAudioManager=(AudioManager)getSystemService(AUDIO_SERVICE);ORAudioManagermAudioManager=(AudioManager)getContext().getSystemService(AUDIO_SERVICE);//LoadaudiofileintsoundID=mSoundPool.load(this,R.raw.bigwave,1);//PutkeyvaluepairinHashMapsoundPoolMap.put(BIG_WAVE,soundID);//PlaysoundintstreamVolume=mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);intactualVolume=mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);intmaxVolume=mAudioManager.getStreamMaxVolume(Audi