最近做了两个用来播放视频文件的工具类
一个是用来播放背景音或者较大文件的工具类
另外一个是播放普通音频的工具类
下面贴代码
/**
* 播放背景音等较长或者较大的文件
*/
public class MusicBackPlayerUtil {
private MediaPlayer bgPlayer, btPlayer, soundPlayer;
public MusicBackPlayerUtil() {
bgPlayer = new MediaPlayer();
btPlayer = new MediaPlayer();
}
/**
* 判断背景音乐是否在播放
* @return
*/
public boolean isBGPlaying() {
if(bgPlayer != null && bgPlayer.isPlaying()) {
return true;
}
return false;
}
/**
* 播放背景音
*/
public void playBgSound(Context context, int ResID) {
try {
if(ResID != 0) {
if(bgPlayer != null) {
if (bgPlayer.isPlaying()) {
bgPlayer.stop();
}
bgPlayer.release();
bgPlayer = null;
}
bgPlayer = MediaPlayer.create(context, ResID);
}
//mPlayer.setDataSource(resPath);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
}
bgPlayer.setLooping(true);
try {
bgPlayer.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
bgPlayer.start();
}
//背景声音大小
public void setBgVolume(float leftVolume, float RightVolume) {
if(bgPlayer != null) {
bgPlayer.setVolume(leftVolume, RightVolume);
}
}
/**
* 播放按钮音
*/
public void playSound(String path) throws Exception {
if (btPlayer == null) {
btPlayer = new MediaPlayer();
}
btPlayer.reset();
btPlayer.setDataSource(path);
btPlayer.prepare();
btPlayer.setLooping(false);
btPlayer.start();
}
public void playSound(Context context, int ResID, boolean isLoop) {
try {
if(ResID != 0) {
if(soundPlayer != null) {
if (soundPlayer.isPlaying()) {
soundPlayer.stop();
}
soundPlayer.release();
soundPlayer = null;
}
soundPlayer = MediaPlayer.create(context, ResID);
}
//mPlayer.setDataSource(resPath);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
}
soundPlayer.setLooping(isLoop);
try {
soundPlayer.prepareAsync();
// soundPlayer.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
}
soundPlayer.start();
}
public MediaPlayer getBgPlayer() {
return this.bgPlayer;
}
public MediaPlayer getBtPlayer() {
return this.btPlayer;
}
public MediaPlayer getPlayer() {
return this.soundPlayer;
}
/**
* 停止播放背景音乐
*/
public void stopBgSound() {
if (bgPlayer == null)
return;
if (bgPlayer.isPlaying())
bgPlayer.stop();
}
/**
* 停止按钮声音播放
*/
public void stopBtSound() {
if (btPlayer == null)
return;
try {
if (btPlayer.isPlaying()) {
btPlayer.stop();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 停止声音播放
*/
public void stopSound() {
if (soundPlayer == null)
return;
try {
if (soundPlayer.isPlaying()) {
soundPlayer.stop();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 释放设备
*/
public void releaseMedia() {
if (bgPlayer != null) {
try {
if (bgPlayer.isPlaying())
bgPlayer.stop();
bgPlayer.release();
} catch (Exception e) {
e.printStackTrace();
}
bgPlayer = null;
}
if (btPlayer != null) {
try {
if (btPlayer.isPlaying())
btPlayer.stop();
btPlayer.release();
} catch (Exception e) {
e.printStackTrace();
}
btPlayer = null;
}
if (soundPlayer != null) {
try {
if (soundPlayer.isPlaying())
soundPlayer.stop();
soundPlayer.release();
} catch (Exception e) {
e.printStackTrace();
}
soundPlayer = null;
}
}
}
使用方法也很简单,创建MusicBackPlayerUtil对象
调用playBgSound方法即可
在生命周期方法里可以这样设置
@Override
protected void onResume() {
super.onResume();
if (musicPlayerUtil != null && !musicPlayerUtil.isBGPlaying()) {
musicPlayerUtil.playBgSound(this, R.raw.backmusic);//停止背景音乐播放
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (musicPlayerUtil != null) {
musicPlayerUtil.stopBgSound();//停止背景音乐播放
}
}
接下来是第二个工具类
/**
* 声音控制类
*/
public class SoundManager {
private static MediaPlayer mPlayer = new MediaPlayer();
private static SoundManager mInstance;
private SoundManager() {
mPlayer = new MediaPlayer();
mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
return true;
}
});
}
public static SoundManager getInstance() {
if (mInstance == null) {
synchronized (SoundManager.class) {
if (mInstance == null) {
mInstance = new SoundManager();
}
}
}
return mInstance;
}
public void playSound(AssetFileDescriptor file) {
if (file == null) {
return;
}
if (mPlayer==null){
mPlayer = new MediaPlayer();
mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
return true;
}
});
}
mPlayer.reset();
try {
mPlayer.setDataSource(file.getFileDescriptor(), file.getStartOffset(),
file.getLength());
mPlayer.setLooping(false);
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.prepare();
mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
}
});
mPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 播放两段发音
* @param file
*/
public void playSoundTwo(AssetFileDescriptor file, final AssetFileDescriptor file2) {
if (file == null) {
return;
}
if (mPlayer==null){
mPlayer = new MediaPlayer();
mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
return true;
}
});
}
mPlayer.reset();
try {
mPlayer.setDataSource(file.getFileDescriptor(), file.getStartOffset(),
file.getLength());
mPlayer.setLooping(false);
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.prepare();
mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
playSound(file2);
}
});
mPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
public void stopSound() {
if (mPlayer == null) {
return;
}
try {
mPlayer.stop();
} catch (Exception e) {
e.printStackTrace();
}
}
public void playOrstop() {
if (mPlayer == null) {
return;
}
try {
if (mPlayer.isPlaying()) {
mPlayer.pause();//暂停
} else {
mPlayer.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void mediaDestory() {
if (mPlayer != null) {
//重置
mPlayer.reset();
//释放资源
mPlayer.release();
//回收
mPlayer = null;
}
}
}
这个使用方法也很简单
例子如下:
SoundManager.getInstance().playSound(getResources().openRawResourceFd(R.raw.backmusic));