我的应用中有6个活动。我想在整个应用程序中播放不同的声音。但问题是,当我从第一个活动开始第二个活动时,我希望从第一个活动中播放的相同声音继续。但无法在SO上找到任何解决方案。这该怎么做?请帮帮我。
我正在使用MediaPlayer
。
答案 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,这样当用户离开你的应用程序时声音就不会继续。