Android MediaPlayer:应已设置字幕控制器:KitKat
我有一个奇怪的问题,我的音频文件有时播放,有时不播放。问题是,当它决定不玩时,DDMS会给我一个:Android MediaPlayer:应已设置字幕控制器:KitKat,android,android-mediaplayer,android-4.4-kitkat,Android,Android Mediaplayer,Android 4.4 Kitkat,我有一个奇怪的问题,我的音频文件有时播放,有时不播放。问题是,当它决定不玩时,DDMS会给我一个: E/MediaPlayer﹕ Should have subtitle controller already set 因为这是一对一的音乐没有播放,我已经确定这可能是问题所在 如果音乐没有播放,我按了音量按钮,它开始播放。 如果我等待大约30秒没有播放,它会再次开始(不循环) 这是怎么回事?我在KitKat使用 player = new MediaPlayer();
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
查看一个on-StackOverflow,以及引入它的引用位置,上面的代码可能无法完全初始化MediaPlayer
对象
用于媒体播放的建议您应调用:
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
在构造
MediaPlayer
之后,在调用其setDataSource
方法之前。这应该可以解决您的问题(为我做了):用异步回调替换代码其余部分后面的“player.start()”行,如下所示:
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
}
});
这个错误只是一个Log.e,不是真正的错误。这不应该导致您的播放器无法播放,我猜这只是因为当您尝试调用start()时,播放器尚未完成准备
我也有同样的问题,我通过在实例化MediaPlayer之后添加以下内容来修复它
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
if (mp == mediaPlayer) {
mediaPlayer.start();
}
}
});
之前,我实现了MediaPlayer.OnPreparedListener并重写了onPrepared(),但它不起作用
我希望这有帮助 我已经很久没有开发这个应用了。下面是我为让这一切正常运转而做的事情。(在KitKat和棒棒糖上测试)。我认为从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();
}
}
在清单文件中设置可能对您有所帮助
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
这没有改变任何事情。我不完全确定当时发生了什么。log语句不足以单独停止程序;唯一能做到这一点的Android日志是log.wtf
。也许问题与上面发布的代码如何调用有关?可能是。我正在运行处理(扩展pApplet)并在destroy onPause等上调用Overwriten onStart上的播放器逻辑…尽管这更具推测性-我从未使用过处理-您可能会考虑使用MediaPlayer。处理程序在运行时试图处理应用程序线程的方式与同步MediaPlayer调用期望处理线程的方式之间可能存在冲突。我使用google推荐的代码,包括setAudioStreamType(),但仍然收到此错误。在主线程和异步中尝试了它。同样的错误。不,这没有影响。我在这里遇到了同样的问题,我的代码过去运行得很好。现在,在看到错误日志后,我立即停止了(音频,而不是应用程序--应用程序很好,例如,我可以启动另一个音频曲目)。你找到解决问题的方法了吗?可能是“对不起,我也是”的重复,但是,你解决了吗?我在这里面临同样的问题,只有5.0棒棒糖。同样的代码以前从未失败过,在4.4.4的模拟器中也不会失败。这个问题的每个答案都不起作用。不要浪费你的时间。你想要这样:这对OP提供的问题没有影响。这绝对与问题无关。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />