mh-two-thousand-and-two
2024-04-12 3d2ec2fd0578d3ba0a414b0cc4e4a2ae60878596
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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()
  }
}