Android 华为手机音频设置播放倍速mMediaPlayer.getPlaybackParams().setSpeed(speed)无效果
程序员文章站
2022-06-18 20:17:59
...
前期项目中做音频播放过程中有设置播放倍速,正常的情况我们设置MediaPlayer参数就能实现,但是当在华为手机上设置时候第一次mMediaPlayer.getPlaybackParams().setSpeed(speed)不仅没效果而且还会导致音频播放暂停,调试发现getPlaybackParams().setSpeed方法返回undefined,貌似是native方法没有实现,但是实际在后面的切换倍速又能正常,主要是第一次有问题,纳尼,这是什么情况,根本无从下手的感觉,尝试各种方法也未能解决。
千思万想之后,解决思路:华为手机第一次切换音频倍速的时候记录当前的播放位置,重新初始化MediaPlayer,设置getPlaybackParams().setSpeed(speed),然后将播放位置切到上次播放的位置:
@Override
public void setSpeed(float speed) {
if (mMediaPlayer != null) {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M){//Android系统版本大于M才能设置倍速
mCurrentSpeed=speed;
mMediaPlayer.setPlaybackParams(mMediaPlayer.getPlaybackParams().setSpeed(speed));//第一次华为手机切换倍数是不成功的
//华为机器特殊处理
if(Build.BRAND.equals("HUAWEI")||Build.MANUFACTURER.equals("HUAWEI")) {
long position = mMediaPlayer.getCurrentPosition();//记录当前音频播放位置
mPlaybackCallback.onHuaWeiRestart();//重置MediaPlayer
//playHuaWei(currentSource);
handler.postDelayed(new Runnable() {
@Override
public void run() {
seekTo(position);//将播放位置设置到上次记录位置
}
},500);
}
if (mMediaPlayer.isPlaying()) {
mPlaybackState = PlaybackStateCompat.STATE_PLAYING;
if (mPlaybackCallback != null) {
mPlaybackCallback.onPlaybackStatusChanged(mPlaybackState);
}
}
}
}
}
更多文章请关注公众号: