我写了一个额外的课程,如“控制”来自不同活动的音乐。当我从活动1切换到活动2时,它应该继续播放。但即使我调用backgroundmusik.start(),它也会停止。再次在我的第二个活动中:
public class Music {
public static MediaPlayer backgroundmusik;
public static int pausedSaver;
public static void playAudio(Context c, int id){
backgroundmusik = MediaPlayer.create(c, id);
backgroundmusik.setLooping(true);
backgroundmusik.start();
}
public static void playFrom() {
if(!backgroundmusik.isPlaying()) {
backgroundmusik.seekTo(pausedSaver);
backgroundmusik.setLooping(true);
backgroundmusik.start();
}
}
public static void playPause()
{
backgroundmusik.pause();
pausedSaver = backgroundmusik.getCurrentPosition();
}
public static void stopAudio(){
if(backgroundmusik.isPlaying()) {
backgroundmusik.stop();
}
}
}
第一项活动:
public class WelcomeActivity extends AppCompatActivity{
Music musicPlayer;
int previous;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome_layout);
musicPlayer.playAudio(this,R.raw.dingdong);
Intent intent3 = new Intent(getApplicationContext(), Main.class);
startActivity(intent3);
finish();
}
}
@Override
protected void onRestart() {
super.onRestart();
musicPlayer.playFrom();
}
@Override
protected void onStart() {
super.onStart();
musicPlayer.playFrom();
}
@Override
protected void onResume() {
super.onResume();
musicPlayer.playFrom();
}
@Override
protected void onPause() {
super.onPause();
musicPlayer.playPause();
}
@Override
protected void onStop() {
super.onStop();
musicPlayer.playPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
musicPlayer.stopAudio();
}
}
第二项活动:
public class Main extends AppCompatActivity{
Music musicPlayer;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
}
}
感谢您的帮助。
答案 0 :(得分:0)
尝试添加此类。为我工作..
public class BackgroundSound extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
MediaPlayer player = MediaPlayer.create(YourActivity.this, R.raw.test_cbr);
player.setLooping(true); // Set looping
player.setVolume(100,100);
player.start();
return null;
}
}
或者更好的选择是使用service
。有关详情,请访问here。
答案 1 :(得分:0)
播放服务中的音乐,使用前台服务。
官方Android文档说:
这是用户主动了解但不是a的服务 当内存不足时杀死系统的候选者。前景 服务必须提供状态栏的通知,即 置于正在进行的标题下。这意味着通知 除非服务被停止或删除,否则不能被解雇 来自前景。
在您的情况下,播放来自服务的音乐的音乐播放器应设置为在前台运行,因为用户明确知道其操作。状态栏中的通知可能指示当前歌曲,并允许用户启动活动以与音乐播放器进行交互。
这是example