如何在Android中的特定事件上停止媒体播放器

时间:2014-04-12 08:43:10

标签: android android-mediaplayer

我的应用中有6个活动。我想在整个应用程序中播放不同的声音。但问题是,当我从第一个活动开始第二个活动时,我希望从第一个活动中播放的相同声音继续。但无法在SO上找到任何解决方案。这该怎么做?请帮帮我。

我正在使用MediaPlayer

2 个答案:

答案 0 :(得分:0)

使用应用程序类或任何单例模式,您可以跨活动保存数据

https://developer.android.com/reference/android/app/Application.html

答案 1 :(得分:0)

在您的活动onPause()中,您必须将曲目的当前进度保存到共享首选项,然后在您的活动onResume()中获取进度并恢复媒体播放器...

public void onPause() {
    super.onPause();
    mediaplayer.pause();
    int progress = mediaplayer.getCurrentPosition();
    getSharedPreferences(getPackageName(), Activity.MODE_PRIVATE).edit().putInt("track_progress",progress).commit();
}

public void onResume() {
    int progress = getSharedPreferences(getPackageName(), Activity.MODE_PRIVATE).getInt("track_progress",0);
    mediaplayer.seekTo(progress);
    mediaplayer.start();
}

好吧,或者@Brian说,使用单身......:)

以单身身份更新,例如

public class BackgroundPlayer {

private static final String TAG = BackgroundPlayer.class.getName();

private static BackgroundPlayer instance;
public static BackgroundPlayer instance() {
    if(instance==null) instance = new BackgroundPlayer();
    return instance;
}

private MediaPlayer mediaPlayer;

public void startBackgroundMusic(Context ctx, int res) {
    if(mediaPlayer==null) {
        mediaPlayer = MediaPlayer.create(ctx, res);
        mediaPlayer.setLooping(true);           
    }
    if(mediaPlayer!=null&&!mediaPlayer.isPlaying())
        Log.i(TAG,"started");
        mediaPlayer.start();            
}

public void stopBackgroundMusic() {
    if(mediaPlayer!=null)
        Log.i(TAG,"stopped");
        mediaPlayer.stop();
        mediaPlayer.release();
        mediaPlayer = null;
}

}

现在,您可以使用

访问代码中任意位置的BackgroundPlayer实例
BackgroundPlayer.instance() 

你可以致电

BackgroundPlayer.instance().startBackgroundMusic(Context, resource);
BackgroundPlayer.instance().stopBackgroundMusic();

的任何地方。现在你必须确保在你的第一个活动onCreate()中调用.startBackgroundMusic并在堆栈的最后一个活动中调用.stopBackgroundMusic,这样当用户离开你的应用程序时声音就不会继续。