android實現背景音樂播放

來源:互聯網
上載者:User

標籤:des   android   style   blog   io   ar   使用   java   for   

 參考了一下網上比人寫的,再使用的時候是放在新開的線程中來播放音樂的,後來發現每次進入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 calledmBackgroundMediaPlayer = createMediaplayerFromAssets(path);mCurrentPath = path;} else {if (!mCurrentPath.equals(path)) {// 播放一個新的背景音樂--- play new background music// 釋放舊的資源並產生一個新的----release old resource and create a new oneif (mBackgroundMediaPlayer != null) {mBackgroundMediaPlayer.release();}mBackgroundMediaPlayer = createMediaplayerFromAssets(path);// 記錄這個路徑---record the pathmCurrentPath = path;}}if (mBackgroundMediaPlayer == null) {Log.e(TAG, "playBackgroundMusic: background media player is null");} else {// 若果音樂現正播放或已近中斷,停止它---if the music is playing or paused, stop itmBackgroundMediaPlayer.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;}}/** * 設定背景音樂的音量 *  * @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;}}

android實現背景音樂播放

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.