setPlaybackParams防止在API 23上开始播放

4

出于某种原因,特别是在 Acer Iconia 平板电脑上,如果在 MediaPlayer 准备好之后并且在启动媒体播放器前调用 setPlaybackParams() 方法,则不会发生任何事情:start() 方法“成功”执行而没有听到任何音频。

在模拟器和其他我拥有的设备以及数千个使用该应用程序的设备中,一切都正常工作。

如果没有抛出异常和生成错误,我如何检测此类不支持 setPlaybackParams() 方法的设备上的失败?我能想到的唯一解决方案是设置播放超时机制。还有其他解决方案吗?


有趣的问题 - Pasha
1个回答

0
这是我为自己的应用解决此问题的方法:
我的应用程序具有播放进度广播器,它在onPrepared()时启动,将mediaplayer的进度广播给任何对此感兴趣的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的功能,从而避免问题而不是修复它...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接