import { DEVICE_FREQUENCY } from '../constants' import { invoke } from '../../bridge' let listener const callbackIds = [] export function startCompass (options, callbackId) { listener = listener || plus.orientation.watchOrientation((res) => { callbackIds.forEach(callbackId => { invoke(callbackId, { direction: res.magneticHeading }) }) }, err => { listener = null invoke(callbackId, { errMsg: `startCompass:fail ${err.message}` }) }, { frequency: DEVICE_FREQUENCY }) setTimeout(() => { invoke(callbackId, { errMsg: 'startCompass:ok' }) }, DEVICE_FREQUENCY) } export function stopCompass () { if (listener) { plus.orientation.clearWatch(listener) listener = null } return {} } export function onCompassChange (callbackId) { if (!callbackIds.length) { startCompass() } callbackIds.push(callbackId) } export function offCompassChange (callbackId) { // 暂不支持移除所有监听 if (callbackId) { const index = callbackIds.indexOf(callbackId) if (index >= 0) { callbackIds.splice(index, 1) } } if (!callbackIds.length) { stopCompass() } }