From f437e88d17d7f4c2e47feaf020319401e580dd63 Mon Sep 17 00:00:00 2001 From: codexu <461229187@qq.com> Date: Fri, 9 Sep 2022 15:38:03 +0800 Subject: [PATCH] =?UTF-8?q?feat(app):=20=E5=A2=9E=E5=8A=A0=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE=E6=9B=B4=E6=96=B0=20API=20=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/platforms/app-plus/service/api/index.js | 1 + .../service/api/location/location-change.js | 80 +++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 src/platforms/app-plus/service/api/location/location-change.js diff --git a/src/platforms/app-plus/service/api/index.js b/src/platforms/app-plus/service/api/index.js index 236303114..4e76834bb 100644 --- a/src/platforms/app-plus/service/api/index.js +++ b/src/platforms/app-plus/service/api/index.js @@ -29,6 +29,7 @@ export * from './file/open-document' export * from './location/choose-location' export * from './location/get-location' export * from './location/open-location' +export * from './location/location-change' export * from './media/audio' export * from './media/choose-image' diff --git a/src/platforms/app-plus/service/api/location/location-change.js b/src/platforms/app-plus/service/api/location/location-change.js new file mode 100644 index 000000000..6a8648ec4 --- /dev/null +++ b/src/platforms/app-plus/service/api/location/location-change.js @@ -0,0 +1,80 @@ +import { invoke } from '../../bridge' +const callbackIds = [] +const callbackOnErrorIds = [] +const callbackOffErrorIds = [] +let watchId + +/** + * 开始更新定位 + */ +export function startLocationUpdate ({ type = 'wgs84' }) { + watchId = plus.geolocation.watchPosition( + res => { + callbackIds.forEach(callbackId => { + invoke(callbackId, res.coords) + }) + }, + error => { + callbackOnErrorIds.forEach(callbackId => { + invoke(callbackId, { + errMsg: 'onLocationChange:fail' + error.message + }) + }) + }, + { + coordsType: type + } + ) +} + +/** + * 暂停更新定位 + * @param {*} callbackId + */ +export function stopLocationUpdate (callbackId) { + if (watchId) { + plus.geolocation.clearWatch(watchId) + } else { + invoke(callbackId, { errMsg: 'stopLocationUpdate:fail' }) + } + return {} +} + +/** + * 监听更新定位 + * @param {*} callbackId + */ +export function onLocationChange (callbackId) { + callbackIds.push(callbackId) +} + +/** + * 监听更新定位失败 + * @param {*} callbackId + */ +export function onLocationChangeError (callbackId) { + callbackOnErrorIds.push(callbackId) +} + +// 移除实时地理位置变化事件的监听函数 +export function offLocationChange (callbackId) { + if (callbackId) { + const index = callbackIds.indexOf(callbackId) + if (index >= 0) { + callbackIds.splice(index, 1) + } else { + callbackOffErrorIds.forEach(callbackId => { + invoke(callbackId, { + errMsg: 'offLocationChange:fail' + }) + }) + } + } else { + callbackIds.length = 0 + } +} + +// 移除实时地理位置变化事件的监听函数 +export function offLocationChangeError (callbackId) { + callbackOffErrorIds.push(callbackId) +} -- GitLab