MediaPlayer:应该已经设置了字幕控制器:KitKat

时间:2014-02-14 22:44:22

标签: android android-mediaplayer android-4.4-kitkat

我有一个奇怪的问题,我的音频文件有时会播放,有时不播放。问题是,当它决定不玩时,DDMS给了我一个:

E/MediaPlayer﹕ Should have subtitle controller already set

因为这是一对一的音乐没有播放,我已经确定这可能是问题......

如果音乐没有播放,我按下音量按钮就会开始播放。 如果我等待大约30秒的无法播放,它会再次开始(不循环播放)。

这是怎么回事?我在KitKat上使用

        player = new MediaPlayer();
        AssetFileDescriptor afd = null;
        try {
            afd = getAssets().openFd("Theme.mp3");
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            player.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
        player.setLooping(true); //restart playback end reached
        //player.setVolume(1, 1); //Set left and right volumes. Range is from 0.0 to 1.0
        player.start(); //start play back

5 个答案:

答案 0 :(得分:11)

查看StackOverflow上的previous discussion以及引入它的引用Android commit,上面的代码可能无法完全初始化MediaPlayer对象。

媒体播放的KitKat example code表示您应该致电:

mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

在构建MediaPlayer后立即调用setDataSource方法之前

答案 1 :(得分:1)

我有同样的问题,我通过在实例化MediaPlayer后添加以下内容来修复它。

mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        if (mp == mediaPlayer) {
                            mediaPlayer.start();
                        }
                    }
                });

之前我正在实现MediaPlayer.OnPreparedListener并覆盖onPrepared()但它不起作用。

我希望这有帮助!

答案 2 :(得分:-1)

这应该可以解决您的问题(对我而言):在代码的其余部分之后使用异步回调替换“player.start()”行,如下所示:

player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mediaPlayer) {
        mediaPlayer.start();
    }
});

此错误只是一个Log.e,而不是真正的错误。它不应该导致你的玩家不玩,我猜这只是因为玩家在尝试调用start()时没有完成准备。

E/MediaPlayer﹕ Should have subtitle controller already set

答案 3 :(得分:-1)

自从我开始使用此应用程序以来已经很长时间了。以下是我最终要做的工作。 (在KitKat和Lollipop上测试过)。我认为从MediaPlayer切换到APMediaPlayer是其中的一部分。

@Override
public void onDestroy() {
    if(player != null) {
        player.release();
        player = null;
    }
    super.onDestroy();
}


@Override
public void onStart() {
    super.onStart();
    if(player != null) {
        player.start();
    }
    else {
        player = new APMediaPlayer(this); //create new APMediaPlayer
        player.setMediaFile("Theme.mp3"); //set the file (files are in data folder)
        player.start(); //start play back
        player.setLooping(true); //restart playback end reached
        player.setVolume(1, 1); //Set left and right volumes. Range is from 0.0 to 1.0
    }

}

@Override
public void onResume() {
    super.onResume();
    if(player != null) {
        player.start();
    }

}

答案 4 :(得分:-12)

在清单文件中设置可能会帮助您

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />