Flutter 获取手机传感器数据

前言

在Flutter中可以使用sensors_plus插件来访问加速度计、陀螺仪、磁力计以及气压传感器

sensors_plue的平台支持

平台 是否支持
Android
iOS
MacOS
Web
Linux
Windows

sensors_plue的要求

  • Flutter >=3.19.0
  • Dart >=3.3.0 <4.0.0
  • iOS >=12.0
  • MacOS >=10.14
  • Android compileSDK 34
  • Java 17
  • Android Gradle Plugin >=8.3.0
  • Gradle wrapper >=8.4

sensors_plue的常用方法

常用方法 描述 监听返回类型
accelerometerEventStream({samplingPeriod}).listen() 监听设备的加速度(包括重力影响) AccelerometerEvent
userAccelerometerEventStream({samplingPeriod}).listen() 监听设备的加速度(不包括重力影响) UserAccelerometerEvent
gyroscopeEventStream({samplingPeriod}).listen() 监听设备的陀螺仪数据 GyroscopeEvent
magnetometerEventStream({samplingPeriod}).listen() 监听设备的环境磁场 MagnetometerEvent
barometerEventStream({samplingPeriod}).listen() 监听设备周围的大气压力 BarometerEvent
AccelerometerEvent

加速计的离散读数。加速计测量设备的速度。请注意,这些读数包括重力的影响。简单地说,您可以使用加速计读数来判断设备是否在特定方向上移动。

属性 描述 类型
timestamp 事件的时间戳,单位为微秒 DateTime
x 沿x轴的加速力(包括重力),单位为m/s^2 double
y 沿y轴的加速力(包括重力),单位为m/s^2 double
z 沿z轴的加速力(包括重力),单位为m/s^2 double
UserAccelerometerEvent

与[AccelerometerEvent]一样,这是加速计的离散读数,用于测量设备的速度。然而,与[AccelerometerEvent]不同,该事件不包括重力的影响。

属性 描述 类型
x 沿x轴的加速力(不包括重力),单位为m/s^2 double
y 沿y轴的加速力(不包括重力),单位为m/s^2 double
z 沿z轴的加速力(不包括重力),单位为m/s^2 double
timestamp 事件的时间戳,单位为微秒 DateTime
GyroscopeEvent

陀螺仪的离散读数。陀螺仪测量设备在3D空间中的速率或旋转。

属性 描述 类型
x 绕x轴的旋转速率,单位为rad/s double
y 绕y轴的旋转速率,单位为rad/s double
z 绕z轴的旋转速率,单位为rad/s double
timestamp 事件的时间戳,单位为微秒 DateTime
MagnetometerEvent

磁力计测量传感器周围的环境磁场,返回每个三维轴的微特斯拉(μT)值。

考虑到这些样本可能受到地球磁场的影响以及设备本身的金属或附近磁铁等局部因素的影响,尽管大多数设备都会补偿这些因素。指南针是磁力计数据通用工具的一个例子。

属性 描述 类型
x 传感器x轴上的环境磁场,单位为μT double
y 传感器y轴上的环境磁场,单位为μT double
z 传感器z轴上的环境磁场,单位为μT double
timestamp 事件的时间戳,单位为微秒 DateTime
BarometerEvent

气压计测量传感器周围的大气压力,返回百帕(hPa)的值。

考虑到这些样本可能受到海拔和天气条件的影响,可用于预测短期天气变化或确定海拔高度。请注意,由于操作设备引起的压力变化,防水手机或类似的密封设备在握持或使用时可能会出现压力波动。高度计是气压计数据通用工具的一个例子。

属性 描述 类型
pressure 传感器周围的大气压力,单位为百帕(hPa)。 double
timestamp 事件的时间戳,单位为微秒 DateTime

用法

如果要获取气压计数据,iOS需要访问运动数据。因此必须在应用文件中包含一个名为的键Info.plist。此键提供一条消息,告知用户应用为何请求访问设备的运动数据

info.plist 条目示例:

复制代码
<key>NSMotionUsageDescription</key>
<string>This app requires access to the barometer to provide altitude information.</string>

示例内容

复制代码
import 'package:sensors_plus/sensors_plus.dart';
// 监听设备的加速度(包括重力影响)
accelerometerEventStream().listen(
  (AccelerometerEvent event) {
    print(event);
  },
  onError: (error) {},
  cancelOnError: true,
); // [AccelerometerEvent (x: 0.0, y: 9.8, z: 0.0)]
 
// 监听设备的加速度(不包括重力影响)
userAccelerometerEventStream().listen(
  (UserAccelerometerEvent event) {
    print(event);
  },
  onError: (error) {},
  cancelOnError: true,
); // [UserAccelerometerEvent (x: 0.0, y: 0.0, z: 0.0)]
 
// 监听设备的陀螺仪数据
gyroscopeEventStream().listen(
  (GyroscopeEvent event) {
    print(event);
  },
  onError: (error) {},
  cancelOnError: true,
);// [GyroscopeEvent (x: 0.0, y: 0.0, z: 0.0)]
 
//监听设备的环境磁场
magnetometerEventStream().listen(
  (MagnetometerEvent event) {
    print(event);
  },
  onError: (error) {},
  cancelOnError: true,
);// [MagnetometerEvent (x: -23.6, y: 6.2, z: -34.9)]
 
//监听设备周围的大气压力
barometerEventStream().listen(
  (BarometerEvent event) {
    print(event);
  },
  onError: (error) {},
  cancelOnError: true,
);// [BarometerEvent (pressure: 1000.0)]
相关推荐
Lanren的编程日记33 分钟前
Flutter 鸿蒙应用离线模式实战:无网络也能流畅使用
网络·flutter·harmonyos
IntMainJhy1 小时前
【Flutter for OpenHarmony 】第三方库 聊天应用:Provider 状态管理实战指南
flutter·华为·harmonyos
IntMainJhy2 小时前
【futter for open harmony】Flutter 聊天应用实战:Material Design 3 全局 UI 规范落地指南✨
flutter·华为·harmonyos
IntMainJhy2 小时前
【flutter for open harmony】Flutter 聊天应用实战:go_router 路由管理完全实现指南
flutter·华为·harmonyos
liulian09162 小时前
【Flutter For OpenHarmony第三方库】Flutter 页面导航的鸿蒙化适配实战
flutter·华为·学习方法·harmonyos
Lanren的编程日记2 小时前
Flutter 鸿蒙应用用户反馈功能实战:快速收集用户意见与建议
flutter·华为·harmonyos
程序员老刘18 小时前
跨平台开发地图:四月风暴前夕,你该怎么选?| 2026年4月
flutter·ai编程·客户端
MakeZero18 小时前
Flutter那些事-PageView
flutter
Lanren的编程日记21 小时前
Flutter鸿蒙应用开发:数据加密功能实现实战,全方位保护用户隐私数据
flutter·华为·harmonyos
梦想不只是梦与想21 小时前
flutter 与 Android iOS 通信?以及实现原理(一)
android·flutter·ios·methodchannel·eventchannel·basicmessage