import { invoke } from '../../bridge' let successCallbackIds = [] let errorCallbackIds = [] let started = false let watchId = 0 export function startLocationUpdate ({ type = 'gcj02' }, callbackId) { watchId = watchId || plus.geolocation.watchPosition( res => { started = true successCallbackIds.forEach(callbackId => { invoke(callbackId, res.coords) }) }, error => { if (!started) { invoke(callbackId, { errMsg: `startLocationUpdate:fail ${error.message}` }) started = true } errorCallbackIds.forEach(callbackId => { invoke(callbackId, { errMsg: `onLocationChange:fail ${error.message}` }) }) }, { coordsType: type } ) setTimeout(() => { invoke(callbackId, { errMsg: 'startLocationUpdate:ok' }) }, 100) } export function stopLocationUpdate () { if (watchId !== 0) { plus.geolocation.clearWatch(watchId) started = false watchId = 0 } return {} } export function onLocationChange (callbackId) { successCallbackIds.push(callbackId) } export function offLocationChange (callbackId) { if (callbackId) { const index = successCallbackIds.indexOf(callbackId) if (index >= 0) { successCallbackIds.splice(index, 1) } } else { successCallbackIds = [] } } export function onLocationChangeError (callbackId) { errorCallbackIds.push(callbackId) } export function offLocationChangeError (callbackId) { if (callbackId) { const index = errorCallbackIds.indexOf(callbackId) if (index >= 0) { errorCallbackIds.splice(index, 1) } } else { errorCallbackIds = [] } }