2016-08-27 2 views
2

Я видел другие сообщения об этом, но я не могу выяснить проблему.Mediaplayer останавливается в android после 30 кликов

Итак, я разрабатываю калькулятор, и все числа имеют один метод onclick, и все операторы имеют разные. У меня есть метод playSound(), где код:

public void playSound(){ 

     MediaPlayer mp= MediaPlayer.create(this, R.raw.btn); 

     setVolumeControlStream(AudioManager.STREAM_MUSIC); 

     if(mp.isPlaying()) 
     { 
      mp.stop(); 
      mp.reset(); 
     } 
      mp.start(); 


    } 

Я пробовал выпуск. Может ли кто-нибудь сообщить мне эффективный способ написать это. Я вызываю этот метод внутри методов onclick. Но после 30 кликов он останавливается. Я также пытался создать MediaPlayer глобальный, но он все равно останавливается. Я читал, что медиапланер действительно дорог, поэтому мы можем использовать soundpool. Но даже soundpool не рекомендуется. Любая помощь?

+0

Пробовал ли вы другой звук или он всегда один и тот же R.raw.btn? – Arlind

+0

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

ответ

1

Реализовать onComplition() Слушатель, и в этом слушателе вы можете вызвать метод релиза

Вы создали несколько экземпляров медиаплеер и не отпускаете MediaPlayer instanace Вот почему вопрос пришел после отпускания называется ваш вопрос будет решен

+0

В моем случае, когда нажата каждая кнопка, он вызывает этот метод. Таким образом, технически в калькуляторе звуки продолжают играть с нажатием кнопки, поэтому, когда я должен освободить медиаплеер? – Sagar

+0

Можно объявить переменную mediaPlayer global и creare obj только один раз? –

+0

То, что я пробовал, заключалось в определении медиаплеера mp глобально и во время oncreate, я сделал следующее: mp = MediaPlayer.create (this, R.raw.btn); и это останавливает звук после 10 щелчков – Sagar

-1

Инициализировать MediaPlayer в качестве атрибута класса:

MediaPlayer media = MediaPlayer.create(this,R.raw. btn); 

В методе PlaySound():

public void playSound(){ 
     setVolumeControlStream(AudioManager.STREAM_MUSIC); 
     mp.reset(); 
     mp.start(); 
    }