【问题标题】:Media player stops working after playing some files播放某些文件后媒体播放器停止工作
【发布时间】:2019-10-27 07:52:12
【问题描述】:

我有一个 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)

【问题讨论】:

  • 尝试在 stop() 之后调用 release() 来释放资源。确保 sound[i​​ndex] 存在。

标签: android android-mediaplayer android-audiomanager


【解决方案1】:
 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();
        }
    }

根据您的需要使用这些方法。 如您所想,问题在于您的创建和停止过程。我认为如果你遵循它,它会有所帮助。

【讨论】:

  • 如果你能详细说明你的答案,那将会很有帮助(对未来的访问者也是如此)。
  • 我现在做到了。谢谢。
  • @MuktaGhosh 谢谢,我测试过了。但问题依然存在。它会在播放大约 20 个声音后停止,如果它稍微快点点击它们。 (每个声音大约 2 或 3 秒)
猜你喜欢
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多