出于某种原因,尤其是在Acer Iconia平板电脑上,如果在启动媒体播放器之前和准备好媒体播放器之后调用setPlaybackparams(),则不会发生任何事情:start()“成功”,并且不会听到音频。
所有的东西都可以在模拟器和其他设备上工作,我还有几千个使用这个应用的设备。
如果没有抛出异常并且没有生成错误,我如何在使用setplaybackparams()的设备和其他设备上检测此故障?我能想到的唯一解决方案是有一个回放超时机制。还有别的吗?

最佳答案

这就是我为自己的应用程序解决此问题的方法:
我的应用程序有一个播放进度广播程序,该程序在onprepared()时启动,它将mediaplayer进度广播给任何感兴趣的ui元素。我在其中添加了gear以检测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的功能将被禁用,从而避免问题,而不是修复它…

08-17 11:29