2017-06-12 77 views
0

我编写了一个额外的类,如下图所示,以“控制”来自不同活动的音乐。当我从Activity 1切换到Activity 2时,它应该继续播放。但即使我调用backgroundmusik.start(),它也会停止播放。又在我的第二个活动:MadiaPlayer活动之间的开始 - 停止 - 暂停

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

感谢您的帮助。

+1

你为什么不在服务类中播放音乐? –

+0

https://stackoverflow.com/questions/8209858/android-background-music-service –

+0

https://stackoverflow.com/questions/14151661/mediaplayer-service-android –

回答

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

0

从服务播放音乐,使用前台服务。

Android官方文档说

那就是用户主动意识到,不是 候选人系统杀死时内存不足的服务。前台 服务必须提供状态栏的通知,该通知位于“正在进行”标题下的 。这意味着通知 不能被解雇,除非该服务从前台停止或被移除 。

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

这是example