Проблемы с MusicPlayer в Android (для начинающих) - PullRequest
3 голосов
/ 21 марта 2012

У меня проблема с приложением, которое я создаю.

По сути, я пытаюсь воспроизводить музыку в фоновом режиме моего приложения, что я могу сделать, и она играет нормально.Тем не менее, когда пользователь переключается на другой экран, музыка перезапускается, а не просто продолжается в обычном режиме.

Вот весь код, который у меня есть в данный момент:

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 ]

2 голосов
/ 21 марта 2012

Вы сделали свой экземпляр Mediaplayer зависимым от действия. Поэтому, когда 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;
}
}
0 голосов
/ 21 марта 2012

Поместите mp.release () - это метод onDestroy, а не метод onPause ().Caz каждый раз, когда новая активность поступает в интерфейс, существующая активность переходит в состояние паузы.

...