Playing background music in android
After referring to what was written on the internet, I used it to play music in a new thread. Later I found that every time I entered the Activity, I would start playing a music again. To avoid repeated playback, I added the singleton mode based on the original code. This avoids repeated playback.
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 mRight Volume; 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 ;} // initialize some data private void initData () {MLeftVolume = 0.5f; mRightVolume = 0.5f; mBackgroundMediaPlayer = null; mIsPaused = false; mCurrentPath = null ;} /*** play background music based on the path ** @ param path *: the audio path * @ param isLoop * in assets: whether to play cyclically */public void playBackgroundMusic (String path, boolean isLoop) {if (mCurrentPath = null) {// This is the first time the background music is played --- it is the first time to play background music // or after the end () method is executed, called again --- or end () was calledmBackgroundM EdiaPlayer = createMediaplayerFromAssets (path); mCurrentPath = path;} else {if (! MCurrentPath. equals (path )) {// play a new background music --- play new background music // release the old resource and generate a new ---- release old resource and create a new oneif (mBackgroundMediaPlayer! = Null) {mBackgroundMediaPlayer. release ();} mBackgroundMediaPlayer = createMediaplayerFromAssets (path); // record this path --- record the pathmCurrentPath = path;} if (mBackgroundMediaPlayer = null) {Log. e (TAG, "playBackgroundMusic: background media player is null");} else {// if the music is playing or has been interrupted, stop it --- if the music is playing or paused, stop itmBackgroundMediaPlayer. stop (); mBackgroundMediaPlayer. setLooping (isLoop); t Ry {mBackgroundMediaPlayer. prepare (); mBackgroundMediaPlayer. seekTo (0); mBackgroundMediaPlayer. start (); this. mIsPaused = false;} catch (Exception e) {Log. e (TAG, "playBackgroundMusic: error state") ;}}/ *** stop playing background music */public void stopBackgroundMusic () {if (mBackgroundMediaPlayer! = Null) {mBackgroundMediaPlayer. stop (); // shocould set the state, if not, the following sequence will be // error // play-> pause-> stop-> resumethis. mIsPaused = false ;}}/*** pause playing background music */public void pauseBackgroundMusic () {if (mBackgroundMediaPlayer! = Null & mBackgroundMediaPlayer. isPlaying () {mBackgroundMediaPlayer. pause (); this. mIsPaused = true ;}}/*** resume playing background music */public void resumeBackgroundMusic () {if (mBackgroundMediaPlayer! = Null & this. mIsPaused) {mBackgroundMediaPlayer. start (); this. mIsPaused = false ;}}/*** replay background music */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") ;}}/ *** determines whether the background music is playing ** @ return: the returned boolean value indicates whether the video is being played */public boolean isBackgroundMusicPlaying () {boolean ret = false; if (mBackgroundMediaPlayer = null) {ret = fal Se;} else {ret = mBackgroundMediaPlayer. isPlaying ();} return ret;}/*** ends the background music and releases the resource */public void end () {if (mBackgroundMediaPlayer! = Null) {mBackgroundMediaPlayer. release ();} // re-"initialize data" initData ();}/*** get the "volume" of the background music ** @ return */public float getBackgroundVolume () {if (this. mBackgroundMediaPlayer! = Null) {return (this. mLeftVolume + this. mRightVolume)/2;} else {return 0.0f;}/*** set the background music volume ** @ param volume *: Set the playback volume, float Type */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 ;}}