国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

android實現(xiàn)背景音樂播放功能

2019-10-22 18:12:05
字體:
來源:轉載
供稿:網(wǎng)友

參考了一下網(wǎng)上別人寫的,再使用的時候是放在新開的線程中來播放音樂的,后來發(fā)現(xiàn)每次進入Activity后就會重復開始一個音樂播放的聲音。為了避免重復開啟播放功能我在原來代碼的基礎上增加了單例模式。這樣就避免了出現(xiàn)重復播放。

package com.liu.zhen.utils;  import android.content.Context; import android.content.res.AssetFileDescriptor; import android.media.MediaPlayer; import android.util.Log;  /**  *  * This class is used for controlling background music  *  */ 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;   }    // 初始化一些數(shù)據(jù)   private void initData() {     mLeftVolume = 0.5f;     mRightVolume = 0.5f;     mBackgroundMediaPlayer = null;     mIsPaused = false;     mCurrentPath = null;   }    /**    * 根據(jù)path路徑播放背景音樂    *    * @param path    *      :assets中的音頻路徑    * @param isLoop    *      :是否循環(huán)播放    */   public void playBackgroundMusic(String path, boolean isLoop) {     if (mCurrentPath == null) {       // 這是第一次播放背景音樂--- it is the first time to play background music       // 或者是執(zhí)行end()方法后,重新被叫---or end() was called       mBackgroundMediaPlayer = createMediaplayerFromAssets(path);       mCurrentPath = path;     } else {       if (!mCurrentPath.equals(path)) {         // 播放一個新的背景音樂--- play new background music         // 釋放舊的資源并生成一個新的----release old resource and create a new one         if (mBackgroundMediaPlayer != null) {           mBackgroundMediaPlayer.release();         }         mBackgroundMediaPlayer = createMediaplayerFromAssets(path);         // 記錄這個路徑---record the path         mCurrentPath = path;       }     }      if (mBackgroundMediaPlayer == null) {       Log.e(TAG, "playBackgroundMusic: background media player is null");     } else {       // 若果音樂正在播放或已近中斷,停止它---if the music is playing or paused, stop it       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 -> resume       this.mIsPaused = false;     }   }    /**    * 暫停播放背景音樂    */   public void pauseBackgroundMusic() {     if (mBackgroundMediaPlayer != null         && mBackgroundMediaPlayer.isPlaying()) {       mBackgroundMediaPlayer.pause();       this.mIsPaused = true;     }   }    /**    * 繼續(xù)播放背景音樂    */   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();     }     // 重新“初始化數(shù)據(jù)”     initData();   }    /**    * 得到背景音樂的“音量”    *    * @return    */   public float getBackgroundVolume() {     if (this.mBackgroundMediaPlayer != null) {       return (this.mLeftVolume + this.mRightVolume) / 2;     } else {       return 0.0f;     }   }    /**    * 設置背景音樂的音量    *    * @param volume    *      :設置播放的音量,float類型    */   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;   } } 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宿松县| 平泉县| 林甸县| 开封县| 万安县| 漯河市| 常山县| 毕节市| 常德市| 霍林郭勒市| 阿瓦提县| 扬中市| 安乡县| 嘉峪关市| 昌江| 宁陕县| 长汀县| 乌鲁木齐县| 临西县| 绥阳县| 东宁县| 开远市| 朔州市| 东港市| 紫金县| 永安市| 昌江| 荔浦县| 朝阳县| 永和县| 琼海市| 乌兰察布市| 长宁区| 凤凰县| 东台市| 桦川县| 都江堰市| 皮山县| 靖西县| 江源县| 那曲县|