出于某种原因,特别是在Acer Iconia平板电脑上如果在启动媒体播放器之前调用setPlaybackParams()并且在MediaPlayer准备好之后,没有任何反应:start()'成功'并且没有听到任何声音。
一切都在模拟器和我拥有的其他设备以及使用该应用程序的几千台设备上运行。
如果没有抛出任何异常并且没有生成错误,如何在此设备和其他不能与setPlaybackParams()配合使用的设备上检测到此故障?我能想到的唯一解决方案是拥有播放超时机制。还有其他人吗?
答案 0 :(得分:0)
这就是我为自己的应用程序解决这个问题的方法:
我的应用程序有一个播放进度广播器,在onPrepared()时启动,它将媒体播放器进度广播到任何对它感兴趣的UI元素。我在其中添加了齿轮以检测onPrepared()调用MediaPlayer-> start()但不显示任何播放进度(mediaPlayer停止)的情况。
进度广播器每秒运行一次并在其中包含此代码:
int stall_cntr = 3;
// WORKAROUND FOR ACER ICONIA TABLETS
// Gear to detect if stall has occured.
if (last_position != position) {
last_position = position;
} else {
// last position is the same it previously was which shouldn't happen if
// mediaplayer isPlaying
if (stall_cntr == 0) {
// set setPlaybackParam_unsupported configuration value.
SharedPreferences settings = mService.getApplicationContext().getSharedPreferences(Settings.metapod_settings, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("setplaybackparams_not_supported", true);
editor.apply();
} else {
stall_cntr--;
}
}
代码将在3秒内检测到媒体播放器停顿(其中onPrepared调用start()但未实现进度)。如果检测到停顿,则禁用需要setPlaybackParam()API的功能,从而避免问题而不是修复它...