Android中的MusicPlayer问题(初学者)

时间:2012-03-21 11:31:26

标签: android audio media-player playback

我正在创建一个应用程序的问题。

基本上,我正在尝试在我的应用程序的背景中播放音乐,我可以这样做,它可以正常播放。但是,当用户切换到另一个屏幕时,音乐会重新开始,而不是像往常一样继续。

以下是我目前的所有代码:

public class MainActivity extends Activity {    


MediaPlayer mp;

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //setting the layout

    mp = MediaPlayer.create(this, R.raw.song);
    mp.setLooping(true);
    mp.getDuration();
    mp.start();

然后我在本课程结束时使用此方法在应用关闭时停止播放音乐:

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();


    mp.release();
    finish();

}

我不确定在我的其他课程中包括什么,所以音乐继续播放。如果有人能告诉我,我会非常感激。

谢谢。

2 个答案:

答案 0 :(得分:2)

您已使Mediaplayer实例依赖于Activity。因此,当Activity重新启动时,会再次调用onCreate()并重新启动音乐。如果要继续播放音乐,请将mp从任何Activity实例中取出并将其放入服务中。然后从MainActivity启动服务,让它播放音乐,除非您停止服务。

  public class MainActivity extends ListActivity {




    /** Called when the activity is first created. */

Intent i; 
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.splash);
       i=new Intent(this, MyMusicService.class);
       final ToggleButton togglebutton =(ToggleButton)findViewById(R.id.toggleButton1);
      togglebutton.setOnClickListener(new OnClickListener() {  
          public void onClick(View v) {   
              // Perform action on clicks    
              if (togglebutton.isChecked()) {   
                  Toast.makeText(MainActivity.this, "Checked", Toast.LENGTH_SHORT).show();  
                  startService(i);  
              } else {   
                  stopService(i);
                  Toast.makeText(MainActivity.this, "Not checked", Toast.LENGTH_SHORT).show(); 
                      }    }});





}
@Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
stopService(i);
}
}

服务是这样的:

   public class MyMusicService extends Service {
    MediaPlayer mp;


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
     mp = MediaPlayer.create(this, R.raw.song);


        mp.start();
mp.setLooping(true);

    return super.onStartCommand(intent, flags, startId);
}


@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}
@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    if(mp!=null)
        mp.release();
    mp=null;
}
}

答案 1 :(得分:0)

将mp.release()放在onDesse方法中,而不是onPause()方法。 Caz每次新的Activity进入界面时,现有的Activity都会进入暂停状态。