android实现背景音乐播放

转载 2015年07月07日 14:27:31

参考了一下网上比人写的,再使用的时候是放在新开的线程中来播放音乐的,后来发现每次进入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;  
        }  
    }  

原文地址:http://blog.csdn.net/liu1164316159/article/details/40400529

android实现背景音乐播放

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

Android仿网易云音乐播放页面 背景虚化碟片效果

1、效果图仿网易云音乐播放页面,主要有4个关键点: 背景虚化。获取音乐的专辑封面,将此图片作为背景图,并进行模糊虚化处理 碟片合成。获取音乐的专辑封面,和黑色碟片图片进行合成 碟片旋转。音乐播放时,碟...
  • jasper_success
  • jasper_success
  • 2017年12月20日 10:51
  • 477

android 利用 service 实现音乐播放

android利用service实现音乐播放
  • zhao123h
  • zhao123h
  • 2014年06月22日 21:51
  • 2833

android :背景音乐播放

1. 主要 引用 这个类(AudioService.java) 1 public class AudioService extends Service implements 2 ...
  • u013280659
  • u013280659
  • 2015年07月03日 20:00
  • 194

android背景音乐播放

前言 我们在开发一些android应用程序,尤其是手机游戏的时候,就需要添加一些背景音乐,在这里我会介绍两种播放的方式供大家参考 第一种:直接播放 这种方式相对简单,就是在activity的on...
  • limoyuhen
  • limoyuhen
  • 2016年07月24日 21:26
  • 413

Android实战 - 音心播放器 (MusicActivity-音乐播放页面界面实现)

1.背景
  • LABLENET
  • LABLENET
  • 2015年12月16日 10:54
  • 1565

背景音乐播放

在android应用程序里,有一种没有UI的类(android.app.Service)——Service。简单来说,Service是一个 background process(背景程序),通过背景程...
  • u013300475
  • u013300475
  • 2015年07月03日 14:33
  • 214

Android开发利用service实现背景音乐播放

设计思路: 建议在播放音乐的时候把MediaPlayer放在Service中,因为如果放在Activity中会使得界面特别卡。而且音乐不能放到后台里播放,一旦退出Activity,音乐就会暂停...
  • u013303279
  • u013303279
  • 2015年07月03日 08:44
  • 318

Android应用开发--MP3音乐播放器界面设计(1)

Android应用开发--MP3音乐播放器界面设计(1)                                           近期突然想自己开发一款...
  • wwj_748
  • wwj_748
  • 2013年05月08日 13:00
  • 43218

Android多媒体学习六:利用Service实现背景音乐的播放

Android允许我们使用Service组件来完成后台任务,这些任务的允许不会影响到用户其他的交互。   1、Activity类 [java] view plai...
  • luohai859
  • luohai859
  • 2014年09月18日 16:36
  • 1164
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android实现背景音乐播放
举报原因:
原因补充:

(最多只允许输入30个字)