diff --git a/src/core/helpers/api.js b/src/core/helpers/api.js index c7f7d5d679050960677f87ae7a5fa516b6eda8b5..daa9230c723b610d9f0b92f8b493de5cb89ad9f9 100644 --- a/src/core/helpers/api.js +++ b/src/core/helpers/api.js @@ -159,6 +159,15 @@ function createApiCallback (apiName, params = {}, extras = {}) { const invokeCallback = function (res) { res.errMsg = res.errMsg || apiName + ':ok' + // 部分 api 可能返回的 errMsg 的 api 名称部分不一致,格式化为正确的 + if (res.errMsg.indexOf(':ok') !== -1) { + res.errMsg = apiName + ':ok' + } else if (res.errMsg.indexOf(':cancel') !== -1) { + res.errMsg = apiName + ':cancel' + } else if (res.errMsg.indexOf(':fail') !== -1) { + res.errMsg = apiName + ':fail' + } + const errMsg = res.errMsg if (errMsg.indexOf(apiName + ':ok') === 0) { diff --git a/src/core/helpers/apis.js b/src/core/helpers/apis.js index e7e27faf51a1c80a4a29f0503687c3ac4ef3c34f..dea6cf9bf692f7ef4784296a4276db70b67bda0a 100644 --- a/src/core/helpers/apis.js +++ b/src/core/helpers/apis.js @@ -187,9 +187,9 @@ const third = [ 'unsubscribePush', 'onPush', 'offPush', - 'requireNativePlugin', + 'requireNativePlugin', 'upx2px' -] +] const apis = [ ...base, @@ -201,10 +201,10 @@ const apis = [ ...device, ...keyboard, ...ui, - ...event, - ...file, + ...event, + ...file, ...canvas, ...third ] -export default apis +module.exports = apis diff --git a/src/core/helpers/protocol/base/upx2px.js b/src/core/helpers/protocol/base/upx2px.js index e149319e04b92e7d426c654a614dce6a54142a4f..4dcb693568c368e2229b445a89f3707d5b6c6d36 100644 --- a/src/core/helpers/protocol/base/upx2px.js +++ b/src/core/helpers/protocol/base/upx2px.js @@ -1,5 +1,5 @@ export const upx2px = [{ name: 'upx', - type: Number, + type: [Number, String], required: true }] diff --git a/src/core/service/api/device/accelerometer.js b/src/core/service/api/device/accelerometer.js new file mode 100644 index 0000000000000000000000000000000000000000..3544dfe5e456c5df795e1172b0f2e91ac733cba0 --- /dev/null +++ b/src/core/service/api/device/accelerometer.js @@ -0,0 +1,48 @@ +import { + invoke +} from 'uni-core/service/bridge' + +import { + onMethod, + invokeMethod +} from '../../platform' + +const callbacks = [] + +onMethod('onAccelerometerChange', function (res) { + callbacks.forEach(callbackId => { + invoke(callbackId, res) + }) +}) + +let isEnable = false +/** + * 监听加速度 + * @param {*} callbackId + */ +export function onAccelerometerChange (callbackId) { + // TODO 当没有 start 时,添加 on 需要主动 start? + callbacks.push(callbackId) + if (!isEnable) { + startAccelerometer() + } +} + +export function startAccelerometer ({ + interval // TODO +} = {}) { + if (isEnable) { + return + } + isEnable = true + return invokeMethod('enableAccelerometer', { + enable: true + }) +} + +export function stopAccelerometer () { + isEnable = false + return invokeMethod('enableAccelerometer', { + enable: false + }) +} diff --git a/src/core/service/bridge.js b/src/core/service/bridge.js index 3119226fcb503648d56e85a3f917cb4ebca4503f..b154cda998d75f5db854b475a184f5c163df35e0 100644 --- a/src/core/service/bridge.js +++ b/src/core/service/bridge.js @@ -4,4 +4,4 @@ export function unpack (args) { export function invoke (...args) { return UniServiceJSBridge.invokeCallbackHandler(...args) -} +} diff --git a/src/platforms/h5/service/api/device/accelerometer.js b/src/platforms/h5/service/api/device/accelerometer.js index ab0f7eac01228c694fbd8a51201b3bcac563e4c7..0b4cf16fa67359dd864c6523c29f8510f27f04cc 100644 --- a/src/platforms/h5/service/api/device/accelerometer.js +++ b/src/platforms/h5/service/api/device/accelerometer.js @@ -1,47 +1,42 @@ -const callbacks = [] -var listener -/** - * 监听加速度 - * @param {*} callbackId - */ -export function onAccelerometerChange (callbackId) { - callbacks.push(callbackId) - if (!listener) { - startAccelerometer() - } -} -/** - * 开始监听加速度数据 - */ -export function startAccelerometer () { - const { - invokeCallbackHandler: invoke - } = UniServiceJSBridge - if (window.DeviceMotionEvent) { - listener = function (event) { - callbacks.forEach(callbackId => { - const acceleration = event.acceleration || event.accelerationIncludingGravity - invoke(callbackId, { - x: acceleration.x || 0, - y: acceleration.y || 0, - z: acceleration.z || 0, - errMsg: 'onAccelerometerChange:ok' - }) - }) - } - window.addEventListener('devicemotion', listener, false) - return {} - } else { - throw new Error('device nonsupport devicemotion') - } -} -/** - * 停止监听加速度数据 - */ -export function stopAccelerometer () { - if (listener) { - window.removeEventListener('devicemotion', listener, false) - listener = null - } - return {} +import { + publish +} from '../../bridge' + +let listener + +export function enableAccelerometer ({ + enable +}) { + return enable ? startAccelerometer() : stopAccelerometer() +} + +/** + * 开始监听加速度数据 + */ +function startAccelerometer () { + if (window.DeviceMotionEvent) { + listener = function (event) { + const acceleration = event.acceleration || event.accelerationIncludingGravity + publish('onAccelerometerChange', { + x: acceleration.x || 0, + y: acceleration.y || 0, + z: acceleration.z || 0, + errMsg: 'onAccelerometerChange:ok' + }) + } + window.addEventListener('devicemotion', listener, false) + return {} + } else { + throw new Error('device nonsupport devicemotion') + } +} +/** + * 停止监听加速度数据 + */ +function stopAccelerometer () { + if (listener) { + window.removeEventListener('devicemotion', listener, false) + listener = null + } + return {} } diff --git a/src/platforms/h5/service/bridge.js b/src/platforms/h5/service/bridge.js index b7868147f0871fe439190d5920cfbcfbf9f9a65f..08a44abbbdeee4ebe3ae654f78da6dfb798a18b5 100644 --- a/src/platforms/h5/service/bridge.js +++ b/src/platforms/h5/service/bridge.js @@ -1,3 +1,10 @@ +/** + * 触发 service 层,与 onMethod 对应 + */ +export function publish (name, res) { + return UniServiceJSBridge.emit('api.' + name, res) +} + export function publishHandler (event, args, pageId) { // h5 平台直接调用UniViewJSBridge global.UniViewJSBridge.subscribeHandler(event, args, pageId)