2013-07-14 1 views
0

вот мой код ниже. У меня есть meidaplayer в моем приложении. если пользователь воспроизводит музыку, то оставьте действие, все правильно, но когда пользователь покидает актив, не воспроизводя музыку, это заставляет силу закрыться.android onstop метод вызвать силу закрыть

В чем проблема?

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

      TextView title1 = (TextView) findViewById(R.id.title1); 
      TextView tx1 = (TextView) findViewById(R.id.textView1); 
      Typeface font = Typeface.createFromAsset(getAssets(), "font.ttf"); 
      title1.setTypeface(font); 
      tx1.setTypeface(font); 

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

      }  

     } 



     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 

     public void onStopTrackingTouch(SeekBar seekBar) { 
     } 

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

     } 

     public void onStop() { 
       super.onStop(); 
       mp.stop(); 
      } 
    } 
+1

Какое исключение составляет сила? Я думаю, вы должны проверить, что mp не является нулевым и окружает вашу строку кода блоком try/catch – Aerilys

ответ

0

Насколько я могу читать Ваш код райт, если пользователь покидает свою активность, это означает, что пользователь использует кнопку назад или сделать что-то другое, что делает приложение остановку, не так ли? Если да, я думаю, проблема в том, что вы не инициализируете свой MediaPlayer в это время. Сначала вы инициализируете этот MediaPlayer при нажатии кнопки, но в onStop() Вы останавливаете не инициализированный MediaPlayer. Инициализировать Ваш MediaPlayer в OnCreate():

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

     TextView title1 = (TextView) findViewById(R.id.title1); 
     TextView tx1 = (TextView) findViewById(R.id.textView1); 
     Typeface font = Typeface.createFromAsset(getAssets(), "font.ttf"); 
     title1.setTypeface(font); 
     tx1.setTypeface(font); 
     mp = MediaPlayer.create(Elementary1Activity.this, R.raw.e1); 


     AudioControl();  



    } 

Я не тестировалась Ваш код, но если этого работы это не распространяется есть еще одна ошибка, которую я hadn't поиски. Но это определенно неправильно.

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