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

时间:2017-06-12 15:41:35

标签: android media-player

我写了一个额外的课程,如“控制”来自不同活动的音乐。当我从活动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);
    }
}

感谢您的帮助。

2 个答案:

答案 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