android MediaPlayer 播放各种来源的音频
来源:互联网 发布:优化发展环境表态发言 编辑:程序博客网 时间:2024/05/21 15:42
一.MediaPlayer的基本使用步骤和方式
通过上面的生命周期:总结三点1.只有prepare后的才可以调用start ‘stop等,注意reset后进入初始状态,要重新创建mediaplayer实例并prepare
2.播放完成后要调用release释放资源
3.暂停播放的控制查看IsPlaying的值
4.调用seekto后重新调用start,显示当前进度可启用线程
如上图:我们总结其使用步骤
1).获得MediaPlayer实例:
a. 可以使用直接new的方式:
MediaPlayermp = new MediaPlayer();
b.也可以使用create的方式,如:
MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了
2) 如何设置要播放的文件:
MediaPlayer要播放的文件主要包括3个来源:
a. 用户在应用中事先自带的resource资源
例如:MediaPlayer.create(this, R.raw.test);
b. 存储在SD卡或其他文件路径下的媒体文件
例如:mp.setDataSource("/sdcard/test.mp3");
c. 网络上的媒体文件
例如:mp.setDataSource("http://www.citynorth.cn/music/confucius.mp3");
MediaPlayer的setDataSource一共四个方法:
setDataSource (String path)
setDataSource (FileDescriptor fd)
setDataSource (Context context, Uri uri)
setDataSource (FileDescriptor fd, long offset, long length)
3)播放器的主要控制方法:
Android通过控制播放器的状态的方式来控制媒体文件的播放,其中:
prepare()和prepareAsync() 提供了同步和异步两种方式设置播放器进入prepare状态,需要注意的是,如果MediaPlayer实例是由create方法创建 的,那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过了。
start()是真正启动文件播放的方法,
pause()和stop()比较简单,起到暂停和停止播放的作用,
seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监听器来处理的。
release()可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。
reset()可以使播放器从Error状态中恢复过来,重新会到Idle状态。
下面直接上例子
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center_vertical" ><LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_vertical" > <Button android:id="@+id/start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="播放" android:onClick="click"/> <Button android:id="@+id/pause" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="暂停" android:onClick="click"/> <Button android:id="@+id/reset" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="重置" android:onClick="click"/> <Button android:id="@+id/stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="停止" android:onClick="click" /> </LinearLayout> <SeekBar android:id="@+id/seekbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:max="100" android:progress="50" /> <!-- android:progressDrawable="@drawable/seekbar_img" android:thumb="@drawable/thumb" --><RelativeLayout android:id="@+id/progress" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" > <TextView android:id="@+id/currentpro" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:text="04:30"/> <TextView android:id="@+id/currentpro" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="04:30"/></RelativeLayout></LinearLayout>
这里测试了分别读取不同来源文件的例子
MainActivity
public class MainActivity extends Activity{MediaPlayer mediaPlayer=null;SeekBar seekBar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);try {/*//使用android.media.MediaPlayer类可以包房音频资源,这些音频资源可以包含在apk文件中,也可以保存在sd卡或手机内存中//1.播放嵌入到apk文件(res/raw目录)中的音频资源,首先使用下面的代码创建MediaPlayer对象,通过MediaPlayer.create的第二个参数指定音频资源mediaPlayer= MediaPlayer.create(MainActivity.this, R.raw.l41);*///2.从网络播放 通过URI的方式:/*String path="http://3g.westcn.com/1.mp3"; //这里给一个歌曲的网络地址就行了 Uri uri = Uri.parse(path); mediaPlayer=MediaPlayer.create(MainActivity.this,uri);*//*//3.网络播放 通过设置数据源的方式: mediaPlayer=new MediaPlayer(); String path="http://3g.westcn.com/1.mp3"; //这里给一个歌曲的网络地址就行了 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDataSource(path);*///3.播放assets目录下的音频AssetManager assetManager = this.getAssets();AssetFileDescriptor fileDescriptor = assetManager.openFd("l41.mp3");mediaPlayer = new MediaPlayer();mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(),fileDescriptor.getLength());mediaPlayer.prepare();/*//4.播放sd卡中的音频文件,可以直接使用new关键字创建MediaPlayer对象,//并使用MediaPlayer.setDataSource方法指定sd卡中的音频文件mediaPlayer=new MediaPlayer();String path="sdcard/MC/music.mp3";System.out.println(path);mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaPlayer.setDataSource(path);mediaPlayer.prepare();*/} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}public void click(View view){try {switch (view.getId()) {case R.id.start:mediaPlayer.start();break;case R.id.pause:if (mediaPlayer.isPlaying()) {mediaPlayer.pause();}else {return;}break;case R.id.reset:mediaPlayer.reset();String pathstr="sdcard/MC/music.mp3";System.out.println(pathstr);mediaPlayer=new MediaPlayer();mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaPlayer.setDataSource(pathstr);mediaPlayer.prepare();//加载必要的音频资源 mediaPlayer.start();break;case R.id.stop:mediaPlayer.stop();mediaPlayer.prepare();//加载必要的音频资源 break;default:break;}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}public boolean onKeyDown(int keyCode, android.view.KeyEvent event) {if (keyCode==KeyEvent.KEYCODE_BACK) {if (mediaPlayer.isPlaying()) {mediaPlayer.release();//播放结束释放资源}}return true;}}
配置文件中必须添加允许网络和读写SD卡的权限
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.test" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.test.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
获取源码点击下载
- android MediaPlayer 播放各种来源的音频
- Android MediaPlayer 播放各种来源的音频文件,特效控制
- Android MediaPlayer播放音频
- android 音频播放--MediaPlayer
- Android:MediaPlayer播放音频
- android MediaPlayer音频播放
- Android 音频的播放之二MediaPlayer
- android MediaPlayer音频播放demo
- android MediaPlayer音频播放demo
- Android之MediaPlayer 音频播放
- android MediaPlayer 音频播放器
- android使用MediaPlayer播放音频
- Android MediaPlayer音频播放总结
- Android中播放音频MediaPlayer
- Android 使用MediaPlayer播放音频
- MediaPlayer播放不同来源的音频文件
- Android学习04音频的播放之SoundPool与MediaPlayer
- android之音频的播放和录制(MediaPlayer,SoundPool,MediaRecorder)
- JavaDOC注释使用方法
- Android性能调优
- 关于Wireshark 分析出现的各种颜色意义
- HDU - 1542 (扫描线+线段树优化)
- Guava学习笔记:Guava新增集合类型-Multiset
- android MediaPlayer 播放各种来源的音频
- erlang sets -----去重
- 使用ajax 传值 必须用alert
- hibernate_Restrictions用法
- 怎样用ASP代码获取网页源代码
- android 马赛克 mosaic
- Guava学习笔记:Guava新增集合类型-Multimap
- test
- 装修公司管理软件系统迎来云计算新时代