Медиаплеер перестает работать после воспроизведения некоторых файлов - PullRequest
0 голосов
/ 27 октября 2019

У меня есть приложение для Android, и я хочу воспроизводить разные звуки. Мой код работает нормально, но после воспроизведения некоторых звуков он перестает воспроизводить больше звуков. Мой слушатель щелчка находится в ListView, так что он циклически повторяет разные звуки. Я думаю, что проблема заключается в создании и остановке, но я не понимаю, как это исправить?

Может кто-нибудь помочь с моим кодом?

 MediaPlayer mp;
 holder.alphabetSound.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(mp != null && mp.isPlaying()) {
                mp.stop();
            }
            mp = MediaPlayer.create(activity,sound[index]));
            mp.start();
        }
    });

Logcat:

2019-10-26 20:44:28.737 1319-8893/? E/MP3Extractor: Unable to resync. Signalling end of stream.
2019-10-26 20:44:28.744 1315-1946/? E/OMXNodeInstance: setConfig(52300a9:google.mp3.decoder, ConfigPriority(0x6f800002)) ERROR: Undefined(0x80001001)
2019-10-26 20:44:28.751 1306-9450/? E/AudioFlinger: no more track names available
2019-10-26 20:44:28.751 1306-9450/? E/AudioFlinger: createTrack_l() initCheck failed -12; no control block?
2019-10-26 20:44:28.751 1320-10055/? E/AudioTrack: AudioFlinger could not create track, status: -12
2019-10-26 20:44:28.751 1320-10055/? E/AudioSink: Unable to create audio track
2019-10-26 20:44:28.752 1320-10052/? E/NuPlayer: received error(0xffffffed) from audio decoder, flushing(0), now shutting down
2019-10-26 20:44:28.752 9789-9801/ir.lariha.englishanimals E/MediaPlayer: error (1, -19)
2019-10-26 20:44:28.752 9789-9789/ir.lariha.englishanimals E/MediaPlayer: Error (1,-19)

1 Ответ

0 голосов
/ 27 октября 2019
 private void startMP(final Context context){
        if(mp == null){
            mp = MediaPlayer.create( context, R.raw.ringtone);
            mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mediaPlayer) {
                    stopMP(context);
                }
            });
        }
        mp.start();
        mp.setLooping(true);
    }

    private void stopMP(Context context) {
        if(mp != null) {
            mp.release();
            mp = null;
            Toast.makeText(context , "song is stopped " , Toast.LENGTH_SHORT).show();
        }
    }

используйте эти методы по своему усмотрению. Как вы думаете, проблема в вашей процедуре создания и остановки. Я думаю, что если вы последуете этому, это будет полезно.

...