Android MadiaPlayer活动之间的开始-停止暂停

Android MadiaPlayer活动之间的开始-停止暂停,android,media-player,Android,Media Player,我写了一个额外的类,如贝娄“控制”不同活动的音乐。当我从活动1切换到活动2时,它应该继续播放。但即使我调用backgroundmusic.start(),它也会停止;在我的第二个活动中: public class Music { public static MediaPlayer backgroundmusik; public static int pausedSaver; public static void playAudio(Context c, int i

我写了一个额外的类,如贝娄“控制”不同活动的音乐。当我从活动1切换到活动2时,它应该继续播放。但即使我调用backgroundmusic.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);
    }
}
}

第二项活动:

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);
    }
}

谢谢您的帮助。

我们将尝试添加此类。为我工作

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;
    }

}
公共类背景声音扩展任务{
@凌驾
受保护的Void doInBackground(Void…参数){
MediaPlayer=MediaPlayer.create(YourActivity.this,R.raw.test\u cbr);
player.setLooping(true);//Set looping
播放器设置音量(100100);
player.start();
返回null;
}
}

或者更好的选择是使用
服务
。有关您可以访问的更多信息。

播放服务中的音乐,请使用前台服务

Android官方文档显示

这是一项用户主动意识到的服务,而不是 内存不足时系统要终止的候选对象。前景 服务必须为状态栏提供通知,即 置于当前标题下。这意味着通知 除非停止或删除服务,否则无法解除 从前景看

在您的情况下,播放服务中音乐的音乐播放器应设置为在前台运行,因为用户明确知道其操作。状态栏中的通知可能指示当前歌曲,并允许用户启动与音乐播放器交互的活动


下面是一个

为什么不在服务类中播放音乐?尝试使用singleton类只维护类的一个实例。调用类播放音乐时,请尝试
getApplicationContext()
而不是
this
。如果什么都不管用,那就用服务玩吧,这是最好的选择。