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)]
相关推荐
江上清风山间明月1 天前
Flutter开发的应用页面非常多时如何高效管理路由
android·flutter·路由·页面管理·routes·ongenerateroute
Zsnoin能2 天前
flutter国际化、主题配置、视频播放器UI、扫码功能、水波纹问题
flutter
早起的年轻人2 天前
Flutter CupertinoNavigationBar iOS 风格导航栏的组件
flutter·ios
HappyAcmen2 天前
关于Flutter前端面试题及其答案解析
前端·flutter
coooliang2 天前
Flutter 中的单例模式
javascript·flutter·单例模式
coooliang2 天前
Flutter项目中设置安卓启动页
android·flutter
JIngles1232 天前
flutter将utf-8编码的字节序列转换为中英文字符串
java·javascript·flutter
B.-2 天前
在 Flutter 中实现文件读写
开发语言·学习·flutter·android studio·xcode
freflying11193 天前
使用jenkins构建Android+Flutter项目依赖自动升级带来兼容性问题及Jenkins构建速度慢问题解决
android·flutter·jenkins
机器瓦力3 天前
Flutter应用开发:对象存储管理图片
flutter