提交 bd7d9cd3 编写于 作者: Q qiang

fix: 修复App端无法获取音频暂停状态的问题

上级 26516432
...@@ -122,7 +122,7 @@ export function getAudioState ({ ...@@ -122,7 +122,7 @@ export function getAudioState ({
errMsg: 'getAudioState:ok', errMsg: 'getAudioState:ok',
duration: 1e3 * (audio.getDuration() || 0), duration: 1e3 * (audio.getDuration() || 0),
currentTime: audio.isStopped ? 0 : 1e3 * audio.getPosition(), currentTime: audio.isStopped ? 0 : 1e3 * audio.getPosition(),
paused: audio.isPaused, paused: audio.isPaused(),
src, src,
volume, volume,
startTime: 1e3 * startTime, startTime: 1e3 * startTime,
...@@ -138,7 +138,7 @@ export function operateAudio ({ ...@@ -138,7 +138,7 @@ export function operateAudio ({
const audio = audios[audioId] const audio = audios[audioId]
const operationTypes = ['play', 'pause', 'stop'] const operationTypes = ['play', 'pause', 'stop']
if (operationTypes.indexOf(operationType) >= 0) { if (operationTypes.indexOf(operationType) >= 0) {
audio[operationType === operationTypes[0] && audio.isPaused ? 'resume' : operationType]() audio[operationType === operationTypes[0] && audio.isPaused() ? 'resume' : operationType]()
} else if (operationType === 'seek') { } else if (operationType === 'seek') {
audio.seekTo(currentTime / 1e3) audio.seekTo(currentTime / 1e3)
} }
......
...@@ -6,9 +6,9 @@ import { ...@@ -6,9 +6,9 @@ import {
publish publish
} from '../../bridge' } from '../../bridge'
let audio let audio
let timeUpdateTimer = null let timeUpdateTimer = null
const TIME_UPDATE = 250 const TIME_UPDATE = 250
const publishBackgroundAudioStateChange = (state, res = {}) => publish('onBackgroundAudioStateChange', Object.assign({ const publishBackgroundAudioStateChange = (state, res = {}) => publish('onBackgroundAudioStateChange', Object.assign({
...@@ -31,15 +31,15 @@ function initMusic () { ...@@ -31,15 +31,15 @@ function initMusic () {
audio.addEventListener(event, () => { audio.addEventListener(event, () => {
// 添加 isStopped 属性是为了解决 安卓设备停止播放后获取播放进度不正确的问题 // 添加 isStopped 属性是为了解决 安卓设备停止播放后获取播放进度不正确的问题
if (event === 'play') { if (event === 'play') {
audio.isStopped = false audio.isStopped = false
startTimeUpdateTimer() startTimeUpdateTimer()
} else if (event === 'stop') { } else if (event === 'stop') {
audio.isStopped = true audio.isStopped = true
} }
if (event === 'pause' || event === 'ended' || event === 'stop') { if (event === 'pause' || event === 'ended' || event === 'stop') {
stopTimeUpdateTimer() stopTimeUpdateTimer()
} }
const eventName = `onMusic${event[0].toUpperCase() + event.substr(1)}` const eventName = `onMusic${event[0].toUpperCase() + event.substr(1)}`
publish(eventName, { publish(eventName, {
...@@ -51,13 +51,13 @@ function initMusic () { ...@@ -51,13 +51,13 @@ function initMusic () {
}) })
}) })
}) })
audio.addEventListener('waiting', () => { audio.addEventListener('waiting', () => {
stopTimeUpdateTimer() stopTimeUpdateTimer()
publishBackgroundAudioStateChange('waiting', { publishBackgroundAudioStateChange('waiting', {
dataUrl: audio.src dataUrl: audio.src
}) })
}) })
audio.addEventListener('error', err => { audio.addEventListener('error', err => {
stopTimeUpdateTimer() stopTimeUpdateTimer()
publish('onMusicError', { publish('onMusicError', {
dataUrl: audio.src, dataUrl: audio.src,
...@@ -71,20 +71,20 @@ function initMusic () { ...@@ -71,20 +71,20 @@ function initMusic () {
}) })
audio.addEventListener('prev', () => publish('onBackgroundAudioPrev')) audio.addEventListener('prev', () => publish('onBackgroundAudioPrev'))
audio.addEventListener('next', () => publish('onBackgroundAudioNext')) audio.addEventListener('next', () => publish('onBackgroundAudioNext'))
} }
function startTimeUpdateTimer () {
stopTimeUpdateTimer()
timeUpdateTimer = setInterval(() => {
publishBackgroundAudioStateChange('timeUpdate', {})
}, TIME_UPDATE)
}
function stopTimeUpdateTimer () { function startTimeUpdateTimer () {
if (timeUpdateTimer !== null) { stopTimeUpdateTimer()
clearInterval(timeUpdateTimer) timeUpdateTimer = setInterval(() => {
} publishBackgroundAudioStateChange('timeUpdate', {})
} }, TIME_UPDATE)
}
function stopTimeUpdateTimer () {
if (timeUpdateTimer !== null) {
clearInterval(timeUpdateTimer)
}
}
function setMusicState (args) { function setMusicState (args) {
initMusic() initMusic()
...@@ -113,7 +113,7 @@ export function getMusicPlayerState () { ...@@ -113,7 +113,7 @@ export function getMusicPlayerState () {
dataUrl: audio.src, dataUrl: audio.src,
duration: audio.getDuration() || 0, duration: audio.getDuration() || 0,
currentPosition: audio.getPosition(), currentPosition: audio.getPosition(),
status: audio.isPaused ? 0 : 1, status: audio.isPaused() ? 0 : 1,
downloadPercent: Math.round(100 * audio.getBuffered() / audio.getDuration()), downloadPercent: Math.round(100 * audio.getBuffered() / audio.getDuration()),
errMsg: `getMusicPlayerState:ok` errMsg: `getMusicPlayerState:ok`
} }
...@@ -189,7 +189,7 @@ export function getBackgroundAudioState () { ...@@ -189,7 +189,7 @@ export function getBackgroundAudioState () {
let newData = { let newData = {
duration: audio.getDuration() || 0, duration: audio.getDuration() || 0,
currentTime: audio.isStopped ? 0 : audio.getPosition(), currentTime: audio.isStopped ? 0 : audio.getPosition(),
paused: audio.isPaused, paused: audio.isPaused(),
src: audio.src, src: audio.src,
buffered: audio.getBuffered(), buffered: audio.getBuffered(),
title: audio.title, title: audio.title,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册