- 版本:1.2.2
- GitHub: https://github.com/GeoTecINIT/awarns-framework
- NPM: https://npmjs.net.cn/package/%40awarns%2Fphone-sensors
- 下载
- 前一天:5
- 上周:6
- 上个月:14
@awarns/phone-sensors
本模块允许从移动设备内嵌的IMU传感器(即加速度计和陀螺仪)和磁力计收集数据。
此插件作为 BackgroundSensors
Android 库的包装器,即使在应用处于后台或设备空闲时也能启用数据收集。此模块提供启动和停止数据收集过程的任务。
使用以下命令行指令安装插件
ns plugin add @awarns/phone-sensors
用法
安装此插件后,您将能够访问两个任务组,每组包含两个任务,用于启动和停止数据收集过程。这两个任务组之间的主要区别在于用于数据收集的底层服务的实现。一个组使用标准数据收集服务,但另一个组使用一个特殊的服务,该服务将系统时钟与NTP服务器同步,以便对收集的数据进行最精确的时间戳标记。从传感器收集的数据将是一个 三轴 记录,如下所述。
设置(可选)
此插件可以在框架初始化期间使用其加载器进行可选注册
// ... platform imports
import { awarns } from '@awarns/core';
import { demoTasks } from '../tasks';
import { demoTaskGraph } from '../graph';
import { registerPhoneSensorsPlugin } from '@awarns/phone-sensors';
awarns
.init(
demoTasks,
demoTaskGraph,
[
registerPhoneSensorsPlugin({
enableVibrationOnStart: false
})
]
)
// ... handle initialization promise
插件加载器参数选项
属性 | 类型 | 描述 |
---|---|---|
enableVibrationOnStart |
boolean |
(可选) 启用或禁用在数据收集服务启动时生成振动。默认启用。 |
如果插件未注册,则 振动默认启用。
警告:由于操作系统施加的限制,插件只能注册一次(即第一次初始化插件)。换句话说,如果插件首先使用
enableVibrationOnStart
注册为true
,然后开发人员想禁用振动,将enableVibrationOnStart
设置为false
将没有任何效果。如果您想更改enableVibrationOnStart
的值,您将不得不卸载应用程序。
任务
标准收集服务任务
任务名称 | 描述 |
---|---|
startDetecting{prefix}Phone{sensor}Changes |
允许以特定配置(见下文)启动对 sensor 的数据收集。可以使用 prefix 来区分不同的配置。 |
stopDetectingPhone{sensor}Changes |
前一个任务的补充。允许停止从 sensor 收集数据。 |
NTP 同步收集服务任务
任务名称 | 描述 |
---|---|
startDetecting{prefix}PhoneNTPSynced{sensor}Changes |
允许以特定配置(见下文)启动对 sensor 的数据收集。在开始收集之前,系统时钟将与NTP服务器同步,以便对收集的数据进行准确的时间戳标记。可以使用 prefix 来区分不同的配置。 |
stopDetectingPhoneNTPSynced{sensor}Changes |
前一个任务的补充。允许停止从 sensor 收集数据。 |
以特定配置启动对传感器的数据收集
要注册这些任务以供使用,您只需在应用程序的任务列表中导入它们并调用它们的生成函数即可
import { Task } from '@awarns/core/tasks';
import {
startDetectingPhoneSensorChangesTask,
PhoneSensor,
SensorDelay,
} from '@awarns/phone-sensors';
export const demoTasks: Array<Task> = [
startDetectingPhoneSensorChangesTask(PhoneSensor.ACCELEROMETER, { sensorDelay: SensorDelay.NORMAL, batchSize: 50 }),
// startDetectingPhoneAccelerometerChanges
startDetectingPhoneSensorChangesTask(PhoneSensor.ACCELEROMETER, { sensorDelay: SensorDelay.FASTEST, batchSize: 50 }, 'Fast'),
// startDetectingFastPhoneAccelerometerChanges
startDetectingPhoneSensorChangesTask(PhoneSensor.GYROSCOPE, { sensorDelay: SensorDelay.NORMAL, batchSize: 50 }),
// startDetectingPhoneGyroscopeChanges
startDetectingPhoneNTPSyncedSensorChangesTask(PhoneSensor.GYROSCOPE, { sensorDelay: SensorDelay.NORMAL, batchSize: 50 }),
// startDetectingPhoneNTPSyncedGyroscopeChanges
startDetectingPhoneSensorChangesTask(PhoneSensor.MAGNETOMETER, { sensorDelay: SensorDelay.NORMAL, batchSize: 50 }),
// startDetectingPhoneMagnetometerChanges
];
警告:对于
PhoneSensor
的数据收集只能启动一次,如果在startDetectingPhoneAccelerometerChanges
执行之后,且数据收集正在进行时,再次执行startDetectingFastPhoneAccelerometerChanges
,则startDetectingFastPhoneAccelerometerChanges
将被忽略。因此,如果您想在数据收集过程中动态更改收集的配置,您将必须停止收集,然后再使用新的期望配置重新启动。
任务生成器参数
参数名称 | 类型 | 描述 |
---|---|---|
sensor |
PhoneSensor |
用于收集数据的天线。见下文。 |
providerConfiguration |
ProviderConfiguration |
任务的收集配置。见下文。 |
prefix (可选) |
字符串 |
将前缀添加到任务的名称中。对于为同一传感器创建具有多个配置的多个任务非常有用。 |
- PhoneSensor
值 | 描述 |
---|---|
ACCELEROMETER |
表示手机的加速度计传感器。 |
GYROSCOPE |
表示手机的陀螺仪传感器。 |
MAGNETOMETER |
表示手机的磁力计传感器。 |
- ProviderConfiguration
属性 | 类型 | 描述 |
---|---|---|
sensorDelay |
SensorDelay | 数字 |
指示两个连续样本之间的时间。可以是SensorDelay (即UI 、NORMAL 、GAME 或FASTEST )或以毫秒为单位的值。 |
batchSize |
数字 |
指示每个记录中要传递的样本数量。 |
注意:Android OS将
sensorDelay
视为建议。样本可能会以更小或更高的速率传递。
任务输出事件
这些任务在执行完成后不会产生显著事件,除了常规的
{task-name}Finished
事件。然而,一旦启动任务完成运行,在数据收集活动期间,内部监听器将发出相关事件。以下列出这些事件。
在应用程序任务图中的示例使用
on('startEvent', run('startDetectingPhoneAccelerometerChanges'));
on('startEvent', run('startDetectingPhoneGyroscopeChanges'));
on('startEvent', run('startDetectingPhoneMagnetometerChanges'));
on('accelerometerSamplesAcquired', run('writeRecords'));
on('gyroscopeSamplesAcquired', run('writeRecords'));
on('magnetometerSamplesAcquired', run('writeRecords'));注意:要使用
writeRecords
任务,必须安装并配置持久化包。见持久化包文档。
停止传感器的数据收集
要注册这些任务以供使用,您只需在应用程序的任务列表中导入它们并调用它们的生成函数即可
import { Task } from '@awarns/core/tasks';
import {
stopDetectingPhoneSensorChangesTask,
PhoneSensor,
} from '@awarns/phone-sensors';
export const demoTasks: Array<Task> = [
stopDetectingPhoneSensorChangesTask(PhoneSensor.ACCELEROMETER), // stopDetectingPhoneAccelerometerChanges
stopDetectingPhoneNTPSyncedSensorChangesTask(PhoneSensor.GYROSCOPE), // stopDetectingPhoneNTPSyncedGyroscopeChanges
stopDetectingPhoneSensorChangesTask(PhoneSensor.MAGNETOMETER), // stopDetectingPhoneMagnetometerChanges
];
注意:可以使用特定
PhoneSensor
的停止任务来停止由任何启动任务为该PhoneSensor
启动的数据收集,无论具体的配置如何。
任务生成器参数
参数名称 | 类型 | 描述 |
---|---|---|
sensor |
WatchSensor |
停止数据收集的传感器。 |
任务输出事件
这些任务在执行完成后不会产生显著事件,除了常规的
{task-name}Finished
事件。在应用程序任务图中的示例使用
on('startEvent', run('startDetectingPhoneAccelerometerChanges').every(1, 'minute'));
on('startEvent', run('startDetectingPhoneNTPSyncedGyroscopeChanges').every(1, 'minute'));
on('startEvent', run('startDetectingPhoneMagnetometerChanges').every(1, 'minute'));
on('accelerometerSamplesAcquired', run('stopDetectingPhoneAccelerometerChanges'));
on('gyroscopeSamplesAcquired', run('stopDetectingPhoneNTPSyncedGyroscopeChanges'));
on('magnetometerSamplesAcquired', run('stopDetectingPhoneMagnetometerChanges'));注意:在不使用其互补任务启动数据收集之前使用这些任务是没有意义的。
事件
名称 | 有效载荷 | 描述 |
---|---|---|
accelerometerSamplesAcquired |
TriAxial |
包含加速度计传感器的x 、y 和z 值的样本列表。 |
gyroscopeSamplesAcquired |
TriAxial |
包含陀螺仪传感器的x 、y 和z 值的样本列表。 |
magnetometerSamplesAcquired |
TriAxial |
包含磁力计传感器的x 、y 和z 值的样本列表。 |
记录
TriAxial
属性 | 类型 | 描述 |
---|---|---|
id |
字符串 |
记录的唯一ID。 |
type |
字符串 |
以下值之一:accelerometer 、gyroscope 或magnetometer 。 |
change |
更改 |
始终为NONE 。 |
timestamp |
日期 |
收集数据时的本地时间。等于记录中第一个样本的时间。 |
samples |
TriAxialSample[] |
包含收集样本的列表。 |
TriAxialSample
属性 | 类型 | 描述 |
---|---|---|
x |
数字 |
传感器的x 值。 |
y |
数字 |
传感器的y 值。 |
z |
数字 |
传感器的z 值。 |
timestamp |
数字 |
收集样本时的本地时间(UNIX时间戳)。 |
许可
Apache License Version 2.0