Android 之 使用MediaPlayer播放音频
程序员文章站
2022-05-16 16:46:58
...
[size=small][color=olive][b]1、 Android 中的多媒体播放都是由MediaPlayer类进行处理的,通过MeidaPlayer可以播放各种
多媒体格式的音频以及视频文件,文件位置如下:
* 存储在应用程序内部的资源;
* 本地资源;
* Content Provider 提供的资源;
* 来自网络的URI 流中的资源;
2、 Android 中提供了常见的音频编码、解码机制;
* 支持的音频格式有:mp3 wav 3gp;
* 支持的视频格式有:mp4 3gp;
3、 使用MediaPlayer 播放多媒体的步骤:
* 对MediaPlayer 进行初始化工作;
* 让MediaPlayer 实例完成准备播放;
* 开始播放;
* 在播放时进行暂停,停止,以及定位到某点播放;
* 播放完成;
小贴士:
* Android 仅支持有限个数的同步MediaPlayer对象,则:播放完成之后要注意对MediaPlayer对象
进行释放;mediaPlayer.release();
* 资源文件在应用中应该放在res/raw 目录中,该目录不会被编译,能生成资源ID , 可以
通过:Resource.openRawResource(int id); 来获取二进制输入流;
4、音频播放有两种方式:
* 方式一:通过对MediaPlayer 实例进行setDataSource 方法,可以接受一个文件路径,ContentProvider提供的URI,网络URL 路径
java代码如下:
* 方式二:通过create()方法返回MediaPlayer对象,通过此方式不需要prepare()工作,create()过程中该工作被完成;
java代码如下:
5、MediaPlayer 的缺点:
* (1)资源占用量较高,延迟时间较长。
* (2)不支持多个音频同时播放
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
代码:
多媒体格式的音频以及视频文件,文件位置如下:
* 存储在应用程序内部的资源;
* 本地资源;
* Content Provider 提供的资源;
* 来自网络的URI 流中的资源;
2、 Android 中提供了常见的音频编码、解码机制;
* 支持的音频格式有:mp3 wav 3gp;
* 支持的视频格式有:mp4 3gp;
3、 使用MediaPlayer 播放多媒体的步骤:
* 对MediaPlayer 进行初始化工作;
* 让MediaPlayer 实例完成准备播放;
* 开始播放;
* 在播放时进行暂停,停止,以及定位到某点播放;
* 播放完成;
小贴士:
* Android 仅支持有限个数的同步MediaPlayer对象,则:播放完成之后要注意对MediaPlayer对象
进行释放;mediaPlayer.release();
* 资源文件在应用中应该放在res/raw 目录中,该目录不会被编译,能生成资源ID , 可以
通过:Resource.openRawResource(int id); 来获取二进制输入流;
4、音频播放有两种方式:
* 方式一:通过对MediaPlayer 实例进行setDataSource 方法,可以接受一个文件路径,ContentProvider提供的URI,网络URL 路径
java代码如下:
/* 获得MeidaPlayer对象 */ MediaPlayer mediaPlayer = new MediaPlayer(); /* 得到文件路径 *//* 注:文件存放在SD卡的根目录,一定要进行prepare()方法,使硬件进行准备 */ File file = new File(Environment.getExternalStorageDirectory(),"aa.mp3"); try{ /* 为MediaPlayer 设置数据源 */ mediaPlayer.setDataSource(file.getAbsolutePath()); /* 准备 */ mediaPlayer.prepare(); }catch(Exception ex){ ex.printStackTrace(); }
* 方式二:通过create()方法返回MediaPlayer对象,通过此方式不需要prepare()工作,create()过程中该工作被完成;
java代码如下:
/* 从res/raw 资源中获取文件 */ mediaPlayer = MediaPlayer.create(this,R.raw.sky); /* 根据URI:创建 */ //mediaPlayer = MediaPlayer.create(this, Uri.parse("/mnt/sdcard/aa.mp3")); /* 网络URI流 */ //mediaPlayer = MediaPlayer.create(this, Uri.parse("http://www.sunzone.com/aa.mp3"));
5、MediaPlayer 的缺点:
* (1)资源占用量较高,延迟时间较长。
* (2)不支持多个音频同时播放
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
代码:
package com.example.multimediaapp; import java.io.File; import android.app.Activity; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { private Button mediaStart,mediaPause,mediaStop; private MediaPlayer mediaPlayer; /* 初始化组件对象 */ public void init(){ mediaStart = (Button) findViewById(R.id.mediaStart); mediaPause = (Button) findViewById(R.id.mediaPause); mediaStop = (Button) findViewById(R.id.mediaStop); } protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /* 初始化 */ init(); mediaPlayer_init(); /* 设置事件监听 */ mediaPause.setOnClickListener(listener); mediaStart.setOnClickListener(listener); mediaStop.setOnClickListener(listener); } /* 事件:控制音频文件的状态 */ OnClickListener listener = new OnClickListener() { public void onClick(View v) { Button btn = (Button)v; int id = btn.getId(); switch (id) { case R.id.mediaStart: //开始 mediaPlayer.start(); Toast.makeText(MainActivity.this, "开始播放", 1000).show(); break; case R.id.mediaPause: //暂停 if(mediaPlayer.isPlaying()){ mediaPlayer.pause(); Toast.makeText(MainActivity.this, "暂停播放", 1000).show(); } break; case R.id.mediaStop: //停止 if(mediaPlayer.isPlaying()){ mediaPlayer.stop(); Toast.makeText(MainActivity.this, "停止播放", 1000).show(); } break; default: break; } } }; /* MediaPlayer 初始化工作 *//* 音频文件在SD卡上 */ public void mediaPlayer_init(){ // /* 获得MeidaPlayer对象 */ // mediaPlayer = new MediaPlayer(); // // /* 得到文件路径 *//* 注:文件存放在SD卡的根目录,一定要进行prepare()方法,使硬件进行准备 */ // File file = new File(Environment.getExternalStorageDirectory(),"aa.mp3"); // // try{ // /* 为MediaPlayer 设置数据源 */ // mediaPlayer.setDataSource(file.getAbsolutePath()); // // /* 准备 */ // mediaPlayer.prepare(); // // }catch(Exception ex){ // ex.printStackTrace(); // } /* 从res/raw 资源中获取文件 */ mediaPlayer = MediaPlayer.create(this,R.raw.sky); /* 根据URI:创建 */ //mediaPlayer = MediaPlayer.create(this, Uri.parse("/mnt/sdcard/aa.mp3")); /* 网络URI流 */ //mediaPlayer = MediaPlayer.create(this, Uri.parse("http://www.sunzone.com/aa.mp3")); } protected void onDestroy() { super.onDestroy(); /* 释放MeidaPlayer 对象 */ mediaPlayer.release(); } }
推荐阅读
-
Android编程视频播放API之MediaPlayer用法示例
-
Android 媒体开发之MediaPlayer状态机接口方法实例解析
-
android之自定义Toast使用方法
-
Android开发之瀑布流控件的实现与使用方法示例
-
android之视频播放系统VideoView和自定义VideoView控件的应用
-
Android开发之使用150行代码实现滑动返回效果
-
Android使用SoundPool实现播放音频
-
iOS使用音频处理框架The Amazing Audio Engine实现音频录制播放
-
android之HttpPost&HttpGet使用方法介绍
-
Android之联系人PinnedHeaderListView使用介绍