android添加背景音乐

来源:互联网 发布:域名dns未修改腾讯云 编辑:程序博客网 时间:2024/04/28 12:41
java代码:(防止重复播放。设置了单例模式,即无论怎么new 生成的都是一个对象)。
package com.edu.bzu.utils;import android.content.Context;import android.content.res.AssetFileDescriptor;import android.media.MediaPlayer;import android.util.Log;public class BackgroundMusic {private static BackgroundMusic backgroundMusic = null;private static final String TAG = "Bg_Music";private float mLeftVolume;private float mRightVolume;private Context mContext;private MediaPlayer mBackgroundMediaPlayer;private boolean mIsPaused;private String mCurrentPath;private BackgroundMusic(Context context) {this.mContext = context;initData();}public static BackgroundMusic getInstance(Context context) {if (backgroundMusic == null) {backgroundMusic = new BackgroundMusic(context);}return backgroundMusic;}// 初始化数据private void initData() {mLeftVolume = 0.5f;mRightVolume = 0.5f;mBackgroundMediaPlayer = null;mIsPaused = false;mCurrentPath = null;}/** * 根据path路径播放背景音乐 *  * @param path *            :assets中的音频路径 * @param isLoop *            :是否循环播放 */public void playBackgroundMusic(String path, boolean isLoop) {if (mCurrentPath == null) {mBackgroundMediaPlayer = createMediaplayerFromAssets(path);mCurrentPath = path;} else {if (!mCurrentPath.equals(path)) {if (mBackgroundMediaPlayer != null) {mBackgroundMediaPlayer.release();}mBackgroundMediaPlayer = createMediaplayerFromAssets(path);mCurrentPath = path;}}if (mBackgroundMediaPlayer == null) {Log.e(TAG, "playBackgroundMusic: background media player is null");} else {mBackgroundMediaPlayer.stop();mBackgroundMediaPlayer.setLooping(isLoop);try {mBackgroundMediaPlayer.prepare();mBackgroundMediaPlayer.seekTo(0);mBackgroundMediaPlayer.start();this.mIsPaused = false;} catch (Exception e) {Log.e(TAG, "playBackgroundMusic: error state");}}}/** * 停止播放背景音乐 */public void stopBackgroundMusic() {if (mBackgroundMediaPlayer != null) {mBackgroundMediaPlayer.stop();// should set the state, if not , the following sequence will be// error// play -> pause -> stop -> resumethis.mIsPaused = false;}}/** * 暂停播放背景音乐 */public void pauseBackgroundMusic() {if (mBackgroundMediaPlayer != null&& mBackgroundMediaPlayer.isPlaying()) {mBackgroundMediaPlayer.pause();this.mIsPaused = true;}}/** * 继续播放背景音乐 */public void resumeBackgroundMusic() {if (mBackgroundMediaPlayer != null && this.mIsPaused) {mBackgroundMediaPlayer.start();this.mIsPaused = false;}}/** * 重新播放背景音乐 */public void rewindBackgroundMusic() {if (mBackgroundMediaPlayer != null) {mBackgroundMediaPlayer.stop();try {mBackgroundMediaPlayer.prepare();mBackgroundMediaPlayer.seekTo(0);mBackgroundMediaPlayer.start();this.mIsPaused = false;} catch (Exception e) {Log.e(TAG, "rewindBackgroundMusic: error state");}}}/** * 判断背景音乐是否正在播放 *  * @return:返回的boolean值代表是否正在播放 */public boolean isBackgroundMusicPlaying() {boolean ret = false;if (mBackgroundMediaPlayer == null) {ret = false;} else {ret = mBackgroundMediaPlayer.isPlaying();}return ret;}/** * 结束背景音乐,并释放资源 */public void end() {if (mBackgroundMediaPlayer != null) {mBackgroundMediaPlayer.release();}// 重新“初始化数据”initData();}/** * 得到背景音乐的“音量” *  * @return */public float getBackgroundVolume() {if (this.mBackgroundMediaPlayer != null) {return (this.mLeftVolume + this.mRightVolume) / 2;} else {return 0.0f;}}/** * 设置背景音乐的音量 */public void setBackgroundVolume(float volume) {this.mLeftVolume = this.mRightVolume = volume;if (this.mBackgroundMediaPlayer != null) {this.mBackgroundMediaPlayer.setVolume(this.mLeftVolume,this.mRightVolume);}}/** * create mediaplayer for music *  * @param path *            the path relative to assets * @return */private MediaPlayer createMediaplayerFromAssets(String path) {MediaPlayer mediaPlayer = null;try {AssetFileDescriptor assetFileDescritor = mContext.getAssets().openFd(path);mediaPlayer = new MediaPlayer();mediaPlayer.setDataSource(assetFileDescritor.getFileDescriptor(),assetFileDescritor.getStartOffset(),assetFileDescritor.getLength());mediaPlayer.prepare();mediaPlayer.setVolume(mLeftVolume, mRightVolume);} catch (Exception e) {mediaPlayer = null;Log.e(TAG, "error: " + e.getMessage(), e);}return mediaPlayer;}}

0 0
原创粉丝点击