Медиаплеер останавливается в андроиде после 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, но он все равно останавливается. Я читал, что медиаплеер на самом деле стоит дорого, поэтому мы можем использовать звуковой пул. Но даже звуковой пул устарел. Любая помощь?


person Sagar    schedule 27.08.2016    source источник
comment
Вы пробуете другой звук или это всегда один и тот же R.raw.btn?   -  person Arlind    schedule 27.08.2016
comment
Это всегда то же самое. Я знаю, что мне не нужно назначать его каждый раз, но я просто бездельничал, чтобы найти решение   -  person Sagar    schedule 27.08.2016


Ответы (2)


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

Вы создали несколько экземпляров медиаплеера, а не выпустили экземпляр медиаплеера, поэтому возникла проблема. После того, как вы отпустите, ваша проблема будет решена.

person Yogesh Rathi    schedule 27.08.2016
comment
В моем случае при нажатии каждой кнопки вызывается этот метод. Так что технически в калькуляторе звуки продолжают воспроизводиться нажатием кнопки. Итак, когда мне выпустить медиаплеер? - person Sagar; 27.08.2016
comment
Можно ли объявить переменную mediaPlayer глобальной и создать объект только один раз? - person Yogesh Rathi; 27.08.2016
comment
Что я пробовал, так это определить медиаплеер mp глобально, и во время oncreate я сделал следующее: mp=MediaPlayer.create(this,R.raw.btn); и это останавливает звук примерно через 10 кликов - person Sagar; 27.08.2016
comment
Хорошо, реализуйте прослушиватель onCompletion и напишите код mp.release в методе oncompletion, удалите глобальную переменную - person Yogesh Rathi; 27.08.2016
comment
Я проверяю, работает отлично, в вашей стороне проблема все еще впереди - person Yogesh Rathi; 27.08.2016
comment
Это сработало! Большое спасибо, я принял ответ. Ваше здоровье - person Sagar; 27.08.2016

Инициализируйте MediaPlayer как атрибут класса:

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

В методе playSound():

public void playSound(){
        setVolumeControlStream(AudioManager.STREAM_MUSIC);
        mp.reset();
        mp.start();
    }
person Arlind    schedule 27.08.2016