MediaPlayer:应该已经设置了字幕控制器:KitKat
Posted
技术标签:
【中文标题】MediaPlayer:应该已经设置了字幕控制器:KitKat【英文标题】:MediaPlayer : Should have subtitle controller already set: KitKat 【发布时间】:2014-03-14 11:46:50 【问题描述】:我遇到了一个奇怪的问题,我的音频文件有时会播放,有时不播放。问题是,当它决定不玩时,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
【问题讨论】:
您找到解决问题的方法了吗? Should have subtitle controller already set Mediaplayer error android的可能重复 对不起,我也是那个没用的“我也是”,但是,你解决了吗?我在 only 使用 5.0 Lollypop 时遇到了同样的问题。相同的代码以前从未失败过,并且在 4.4.4 的模拟器中也不会失败。 这个问题的每个答案都不起作用。不要浪费你的时间。你想要这个:***.com/a/20149754/1048340 【参考方案1】:查看 *** 上的 previous discussion 和引用的 Android commit,上面的代码可能无法完全初始化 MediaPlayer
对象。
用于媒体播放的KitKat example code 建议您致电:
mediaPlayer.setAudiostreamType(AudioManager.STREAM_MUSIC);
在你构造MediaPlayer
之后,在你调用它的setDataSource
方法之前。
【讨论】:
这并没有改变任何东西。 我不完全确定当时发生了什么。日志语句应该不足以自行停止程序;唯一会执行此操作的 Android 日志是Log.wtf
。也许问题与上面发布的代码的调用方式有关?
可能是。我正在运行处理(扩展 pApplet)并在销毁 onPause 等时调用覆盖 onStart 的播放器逻辑...
虽然这更具推测性 - 我从未使用过 Processing - 您可能会考虑使用 MediaPlayer asynchronously。 Processing 尝试在运行时处理应用线程的方式与同步 MediaPlayer 调用期望处理它们的方式之间可能存在冲突。
我使用谷歌推荐的代码,包括 setAudioStreamType() ,但我仍然收到此错误。在主线程和异步中尝试过。同样的错误。【参考方案2】:
我遇到了同样的问题,我通过在实例化 MediaPlayer 后添加以下内容来修复它。
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
@Override
public void onPrepared(MediaPlayer mp)
if (mp == mediaPlayer)
mediaPlayer.start();
);
以前我正在实现 MediaPlayer.OnPreparedListener 并覆盖 onPrepared() 但它不起作用。
我希望这会有所帮助!
【讨论】:
【参考方案3】:这应该可以解决您的问题(为我解决了问题):将其余代码后面的“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
【讨论】:
不,这没有影响。我在这里遇到了同样的问题,而且我的代码曾经运行得很好。现在,在看到错误日志后,我立即停止(音频,而不是应用程序 - 应用程序很好,例如我可以启动另一个音轨)。【参考方案4】:我已经很久没有开发这个应用程序了。这是我最终为使其正常工作所做的工作。 (在 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();
【讨论】:
【参考方案5】:在清单文件中设置可能会对您有所帮助
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
【讨论】:
这对OP提供的问题没有影响。 这与问题完全无关。以上是关于MediaPlayer:应该已经设置了字幕控制器:KitKat的主要内容,如果未能解决你的问题,请参考以下文章
应该有字幕控制器已经设置 Mediaplayer 错误 Android