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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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 = []
  }
}