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

首頁 > 系統 > Android > 正文

android實現背景音樂播放功能

2019-12-12 00:58:05
字體:
來源:轉載
供稿:網友

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

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;   }    // 初始化一些數據   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) {       // 這是第一次播放背景音樂--- it is the first time to play background music       // 或者是執行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;     }   }    /**    * 繼續播放背景音樂    */   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;     }   }    /**    * 設置背景音樂的音量    *    * @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;   } } 

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陕西省| 靖州| 琼海市| 万州区| 原平市| 贵定县| 丰都县| 酉阳| 景洪市| 同江市| 平凉市| 吴江市| 六安市| 阳山县| 本溪市| 库伦旗| 莱西市| 龙南县| 黄冈市| 河东区| 垫江县| 广州市| 新巴尔虎左旗| 娱乐| 承德市| 全州县| 都匀市| 信阳市| 天镇县| 正安县| 寿光市| 武川县| 丹阳市| 北海市| 元氏县| 五原县| 临沂市| 高淳县| 阳高县| 科技| 太白县|