栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

android实现背景音乐播放功能

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

android实现背景音乐播放功能

参考了一下网上别人写的,再使用的时候是放在新开的线程中来播放音乐的,后来发现每次进入Activity后就会重复开始一个音乐播放的声音。为了避免重复开启播放功能我在原来代码的基础上增加了单例模式。这样就避免了出现重复播放。

package com.liu.zhen.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; 
  } 
 
   
  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"); 
      } 
    } 
  } 
 
   
  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(); 
  } 
 
   
  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); 
    } 
  } 
 
   
  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; 
  } 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/156291.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号