Сбой приложения Android при вызове onPause - PullRequest
0 голосов
/ 05 октября 2011

Здравствуйте, я новичок в android dev, использую Eclipse и занимаюсь разработкой некоторых звуковых карт. моя проблема заключается в следующем:

public class BernardsActivity extends Activity {

    MediaPlayer eileanBeag;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.bernards_layout);

        Button eileanBeagButton = (Button) findViewById(R.id.ButtonB1);

        eileanBeagButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                eileanBeag = MediaPlayer.create(getApplicationContext(), R.raw.eilean_beag);
                eileanBeag.start();
            }    
      });  

    ***public void onPause() {
        eileanBeag.release();                   
    }***    
}

приложение работает нормально, все аудио воспроизводятся нормально, но когда я покидаю приложение с помощью кнопки «назад», оно говорит мне, что процесс неожиданно остановился, и мне нужно принудительно завершить работу.

метод работает нормально, когда я определяю MediaPlayer вне метода onCreate, но я хочу использовать много звуков, и чтобы сократить время загрузки, я определяю его только после нажатия кнопки.

Я попытался использовать OnCompleteListener, и он, кажется, работает, но потом он рано отключает мой звуковой клип.

поэтому любая помощь в этом будет очень признательна.

спасибо.

Ответы [ 3 ]

3 голосов
/ 05 октября 2011

Единственное, что выглядит как проблема, это то, что перед вызовом eileanBeag.release(); вы должны позвонить eileanBeag.stop();.Вы не можете напрямую выпустить игрока, когда играете.Также вам не хватает super.onPause();

2 голосов
/ 05 октября 2011

Должно быть так:

public void onPause() {
    super.onPause();
    eileanBeag.pause();
}

protected void onDestroy() {
    super.onDestroy();
    if(eileanBeag != null) {
        eileanBeag.stop();  
        eileanBeag.release();
    }
}
0 голосов
/ 05 октября 2011

Вам нужно вызвать super.onPause() в качестве первого утверждения внутри вашего onPause метода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...