mediaPlayer.release()导致我的应用崩溃java

huangapple 未分类评论48阅读模式
英文:

mediaPlayer.release() crashes my app java

问题

我有一个项目,在自定义的数组适配器中添加了一个 MediaPlayer,我让它从数组列表中获取音频文件的资源 ID。问题是,我希望在音频播放完成后释放媒体播放器,但每次我尝试在 OnCompletion 中添加释放操作,并且在媒体播放器播放声音时尝试按下视图,应用程序就会崩溃。我在网上搜索到一段代码,但它给了我一个错误,我找不到这种崩溃的实际原因。以下是点击监听器和媒体播放器的代码:

final MediaPlayer mediaPlayer = MediaPlayer.create(getContext(), currentWord.getVoiceResourceID());

// 等待用户通过单击列表项来播放声音。
View.OnClickListener listener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // 将 getVoiceResourceID() 的返回值存储到 mVoice 中。
        // 我认为这一行可以忽略,所以我们在创建媒体播放器时调用该方法。
        // 创建我们的媒体播放器并将轨道放入其中。
        mediaPlayer.selectTrack(currentWord.getVoiceResourceID());
        mediaPlayer.start();
        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                mediaPlayer.release();
            }
        });
    }
};

希望我能解决这个问题。

英文:

I have a project where I added a MediaPlayer in a custom Array Adapter and I make it take the Resource ID of the audio file from the Array List the problem is that I want to release the media player after the audio completes but every time I try to add release in OnCompletion and try to press a view while the media player plays a sound the app crashes .. I searched online and found a code but it gives me an error and I can't find the actual reason for such a crash.
that's the code for the on Click Listener and the Media player:

final MediaPlayer mediaPlayer = MediaPlayer.create(getContext(), currentWord.getVoiceResourceID());

        // Wait for user's input by his click on the list's item to play the sound.
        View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Storing the return value of getVoiceResourceID() into mVoice.
                // I think this line can be ignored so we call the method inside the creation of the Media Player.
                // Creating our media player and put our track on it.
                mediaPlayer.selectTrack(currentWord.getVoiceResourceID());
                mediaPlayer.start();
                mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {

                                mediaPlayer.release();
                    }
                });
            }
        };

I hope I could fix that problem.

huangapple
  • 本文由 发表于 2020年4月8日 05:53:28
  • 转载请务必保留本文链接:https://java.coder-hub.com/61089976.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定