2013-07-14 3 views
0

Я новичок в программировании для Android. У меня есть следующий код с медиаплеер. когда пользователь нажимает на заднюю клавишу или переходит к другому действию, звук не останавливается.звук не останавливается, когда пользователь нажимает клавишу возврата

В чем проблема? У меня есть метод onDestory, но моя проблема существует!

public class Elementary1Activity extends Activity implements Runnable, OnClickListener, OnSeekBarChangeListener{ 
     private SeekBar seekBar; 
     private ImageButton startMedia; 
     private ImageButton pauseMedia; 
     private MediaPlayer mp; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.elementary1);    


      AudioControl();  

     } 

     public void AudioControl(){ 
      seekBar = (SeekBar) findViewById(R.id.seekBarnew2); 
      startMedia = (ImageButton) findViewById(R.id.playbuttonnew2); 
      pauseMedia = (ImageButton) findViewById(R.id.pausebuttonnew2); 
      seekBar.setOnSeekBarChangeListener(this); 
      startMedia.setOnClickListener(this); 
      pauseMedia.setOnClickListener(this); 
     }  

     public void run() { 
      int currentPosition= 0; 
      int total = mp.getDuration(); 
      while (mp!=null && currentPosition<total) { 
       try { 
        Thread.sleep(1000); 
        currentPosition= mp.getCurrentPosition(); 
       } catch (InterruptedException e) { 
        return; 
       } catch (Exception e) { 
        return; 
       }    
       seekBar.setProgress(currentPosition); 
      } 
     } 

     public void onClick(View v) { 
      pauseMedia.setVisibility(View.VISIBLE); 
      seekBar.setVisibility(View.VISIBLE); 
      startMedia.setVisibility(View.INVISIBLE); 
      if (v.equals(startMedia)) { 
       if (mp != null && mp.isPlaying()) return; 
       if(seekBar.getProgress() > 0) { 
        mp.start(); 
        return; 
       } 
       mp = MediaPlayer.create(Elementary1Activity.this, R.raw.e1); 
       mp.start();    

       seekBar.setProgress(0); 
       seekBar.setMax(mp.getDuration()); 
       new Thread(this).start(); 
      } 

      if (v.equals(pauseMedia) && mp!=null) { 
       mp.pause(); 
       pauseMedia.setVisibility(View.INVISIBLE); 
       startMedia.setVisibility(View.VISIBLE); 

      }  

     } 

     @Override 
     public void onDestroy() { 
      super.onStop(); 
      mp= MediaPlayer.create(Elementary1Activity.this,R.raw.e1); 
      if(mp.isPlaying()) 
      { 
      mp.stop(); 
      mp.release(); 
      finish(); 
      } 
      } 


     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 

     public void onStopTrackingTouch(SeekBar seekBar) { 
     } 

     public void onProgressChanged(SeekBar seekBar, int progress, 
       boolean fromUser) { 
      if(fromUser) mp.seekTo(progress); 

     } 


    } 
+1

Почему вы создаете новый медиапланер в onDestroy()? – kevinsa5

+0

что мне делать? пожалуйста помогите. Я новичок, и у меня проблемы с этой проблемой. – hossein

+0

Destroy() вызывается, когда сам процесс уничтожается - путем переключения процессов вы просто приостанавливаете активность. Кроме того, нет смысла создавать новый объект MediaPlayer в функции destroy(), потому что он все равно будет удален. 'mp' либо уже создан, либо нет, поэтому проверьте, существует ли он, и если да, остановите его, как в ответе Андреаида. – kevinsa5

ответ

1

Я бы использовал событие onPause() в вашей Элементарной1Activity для управления паузой в музыке.

Что-то вроде:

@Override 
public void onPause() { 
    super.onPause(); 
    if (mp!=null) { 
     mp.pause(); 
    } 
} 
0

Вы можете сделать две вещи. Если вы хотите, чтобы MediaPlayer стоп, когда вы нажимаете кнопку назад, и вы хотите, чтобы закрыть приложение лучший вариант является:

@Override 
public void onDestroy(){ 
    if(mp != null){  
     if(mp.isPlaying()){ 
      mp.stop 
     } 
     mp.release(); 
    } 
    super.onDestroy(); 
} 

И если вы хотите, чтобы сделать эту MediaPlayer остановку при смене деятельности:

@Override 
public void onPause(){ 
    if (mp != null && mp.isPlaying()){ 
     mp.pause(); 
    } 
} 

Кроме того, не создавайте новый MediaPlayer, если хотите закрыть приложение.

Смежные вопросы