跳到主要内容
版本:v8

@capacitor/motion

Motion API 用于追踪加速度计和设备方向(指南针朝向等)。

安装​

npm install @capacitor/motion
npx cap sync

权限​

此插件目前使用 Web API 实现。在 iOS 设备上, 在访问设备运动或方向事件之前必须请求权限。要请求权限,请在用户发起的任何操作 (如按钮点击)中提示用户:

import { PluginListenerHandle } from '@capacitor/core';
import { Motion } from '@capacitor/motion';


let accelHandler: PluginListenerHandle;
let orientationHandler: PluginListenerHandle;

myAccelerationButton.addEventListener('click', async () => {
if (typeof DeviceMotionEvent.requestPermission === 'function') {
try {
const permission = await DeviceMotionEvent.requestPermission();
if (permission !== 'granted') return;
} catch (e) {
// 处理错误
return;
}
}

// 一旦用户批准,就可以开始监听:
accelHandler = await Motion.addListener('accel', event => {
console.log('设备运动事件:', event);
});
});

myOrientationButton.addEventListener('click', async () => {
if (typeof DeviceOrientationEvent.requestPermission === 'function') {
try {
const permission = await DeviceOrientationEvent.requestPermission();
if (permission !== 'granted') return;
} catch (e) {
// 处理错误
return;
}
}

// 一旦用户批准,就可以开始监听:
orientationHandler = await Motion.addListener('orientation', event => {
console.log('设备方向事件:', event);
});
});

// 停止加速度监听器
const stopAcceleration = () => {
if (accelHandler) {
accelHandler.remove();
}
};

// 停止方向监听器
const stopOrientation = () => {
if (orientationHandler) {
orientationHandler.remove();
}
};

// 移除所有监听器
const removeListeners = () => {
Motion.removeAllListeners();
};

请参阅 DeviceMotionEvent 和 DeviceOrientationEvent API,以分别了解 'accel' 和 'orientation' 事件中提供的数据。

API​

addListener('accel', ...)​

addListener(eventName: 'accel', listenerFunc: AccelListener) => Promise<PluginListenerHandle>

添加加速度计数据的监听器

参数类型
eventName'accel'
listenerFunc
AccelListener

返回:

Promise<PluginListenerHandle>

始于: 1.0.0


addListener('orientation', ...)​

addListener(eventName: 'orientation', listenerFunc: OrientationListener) => Promise<PluginListenerHandle>

添加设备方向变化(指南针朝向等)的监听器

参数类型
eventName'orientation'
listenerFunc
OrientationListener

返回:

Promise<PluginListenerHandle>

始于: 1.0.0


removeAllListeners()​

removeAllListeners() => Promise<void>

移除附加到此插件的所有监听器。

始于: 1.0.0


接口​

PluginListenerHandle​

属性类型
remove() => Promise<void>

AccelListenerEvent​

属性类型描述始于
acceleration
Acceleration
一个对象,提供设备在 X、Y、Z 三个轴上的加速度。Acceleration 以 m/s 表示。1.0.0
accelerationIncludingGravity
Acceleration
一个对象,提供设备在 X、Y、Z 三个轴上包含重力影响的加速度。Acceleration 以 m/s 表示。1.0.0
rotationRate
RotationRate
一个对象,提供设备在三个方向轴 alpha、beta 和 gamma 上的方向变化率。Rotation rate 以度/秒表示。1.0.0
intervalnumber一个数字,表示从设备获取数据的时间间隔,以毫秒为单位。1.0.0

Acceleration​

属性类型描述始于
xnumber沿 X 轴的加速度量。1.0.0
ynumber沿 Y 轴的加速度量。1.0.0
znumber沿 Z 轴的加速度量。1.0.0

RotationRate​

属性类型描述始于
alphanumber绕 Z 轴旋转的量,以度/秒表示。1.0.0
betanumber绕 X 轴旋转的量,以度/秒表示。1.0.0
gammanumber绕 Y 轴旋转的量,以度/秒表示。1.0.0

类型别名​

AccelListener​

(event: AccelListenerEvent): void

OrientationListener​

(event: RotationRate): void

OrientationListenerEvent​

RotationRate