MediaPlayer:应该有字幕控制器已经设置:KitKat
我有一个奇怪的问题,我的audio文件有时播放,有时不播放。 问题是,当它决定不玩的时候,DDMS给了我一个:
E/MediaPlayer﹕ Should have subtitle controller already set
因为这是一对一的音乐不玩,我已经确定,这可能是问题…
如果音乐没有播放,我就按下音量button,开始播放。 如果我等待大约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
看看以前关于StackOverflow的讨论 ,以及引入了Android的提交 ,上面的代码可能不会完全初始化MediaPlayer
对象。
用于媒体播放的KitKat示例代码表明您应该调用:
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
在构buildMediaPlayer
,在调用setDataSource
方法之前立即执行。
我有同样的问题,我通过实例化MediaPlayer后添加以下内容来修复它。
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { if (mp == mediaPlayer) { mediaPlayer.start(); } } });
以前我正在实现MediaPlayer.OnPreparedListener和重写onPrepared(),但它没有工作。
我希望这有帮助!
我从事这个应用程序已经很长时间了。 这是我最终做的工作。 (在KitKat和棒棒糖上testing)。 我认为从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(); } }
这应该解决你的问题(对我来说):代替其余的代码,用一个asynchronouscallback代替“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
在清单文件中设置可能会帮助你
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />