2015-12-02 5 views
0

В настоящее время я работаю над приложением Android с функцией воспроизведения звука. В play_pause Activity у меня есть кнопка поиска и кнопка для управления аудио.Android MediaPlayer, SeekBar Исключение при изменении активности

public class PlayerActivity extend AppCompatActivity { 
    ... 
    ... 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     playerButton = (Button) findViewById(R.id.playButton); 

     playerButton.setOnClickListener(new Button.setOnClickListener() { 
       if (player != null) { 
        //load music to player 
        player.create(PlayerActivity.this, R.raw.music); 
        seekbar.setMax(player.getDuration()); 

        mTimer = new Timer(); 
        mTimerTask = new TimerTask() { 
         public void run() { 
          seekbar.setProgress(player.getCurrentPosition());; 
         } 
        }; 
        mTimer.schedule(mTimerTask, 0, 10); 
       } 
     }); 
    } 
} 

Когда я нажимаю кнопку «Назад», не нажав кнопку «играть», мое приложение может успешно сменить действие. Однако, как только нажата кнопка «играть», я не могу изменить активность. Ниже приведен метод onDestroy().

protected void onDestroy() { 
    super.onDestroy(); 
    player.release(); 
} 

Logcat имеет сообщение об ошибке о том,

java.lang.IllegalStateException 
at MediaPlayer.getCurrentPosition() 
at PlayerActivity.run() //which is the mTimerTask 
at java.util.Timer$TimerImpl.run() 

Кто-нибудь есть идеи, как решить?

+0

остановить задачу таймера в onDestroy –

ответ

0

Отмена таймера OnDestroy деятельности тоже по телефону

mTimer.cancle(); 

Исключение возникает из-за зов player.getCurrentPosition(); после выпуска экземпляра медиаплеера для уничтожения Activity, так как вы не запускаете поток таймера.