如何在 Flutter 中检测设备运动方向?

Posted

技术标签:

【中文标题】如何在 Flutter 中检测设备运动方向?【英文标题】:How to detect device motion direction in Flutter? 【发布时间】:2021-12-29 07:23:13 【问题描述】:

我正在尝试检测设备移动的方向。如果拿起设备(手机或平板电脑)并向右或向左移动,我想使用 Flutter 进行检测。

这是我尝试过的:

我已经尝试使用sensors_plus 库为此并尝试使用加速度计来检测左右方向,程序如下所示。

void initState() 
userAccelerometerEvents.listen((UserAccelerometerEvent event) 
  var me = event.x;

  var me2 = num.parse(me.toStringAsFixed(2));
  print(me2);

  if (me2.round() < 0) 
    setState(() 
      direction = "Left";
    );
  
  if (me2 > 0) 
    if (me2 > 0.5) 
      setState(() 
        direction = "Right";
      );
     else 
      setState(() 
        direction = "Still";
      );
    
  
);
super.initState();

我得到的输出是:

如果我快速移动设备,程序只会显示左或右,尽管我想在较慢的速度下检测方向。为此,我尝试采用较小的 "event.x" 值,但在这种情况下,即使设备静止,输出也会在“左”、“右”和“静止”之间快速切换。

我在网上或包文档或示例中找不到任何涵盖此问题的示例。

我想知道如何实现这一目标?我也想知道慢速下设备的左右移动。

我应该使用其他传感器吗?

我不完全了解我也尝试过使用的磁力计的输入。任何有助于理解的帮助表示赞赏。

我也尝试在 pub.dev 上搜索一个包,但我找不到任何适合此需求的包。

非常感谢任何帮助。

【问题讨论】:

您可以参考pub.dev/packages/sensors或pub.dev/packages/motion_sensors 【参考方案1】:

插件告诉你加速。如果您想检测运动,即速度,您需要将积分过滤器应用于这些事件的数据。您可能想使用UserAccellerationEvents,因为它们已经消除了重力。

此外,使用来自陀螺仪的事件将使您的计算更加稳健。

这是sensor fusion的申请。

【讨论】:

【参考方案2】:

您可以尝试使用位置包来访问设备当前位置。它具有 heading 属性,对您有用。您可以使用侦听器来捕获设备位置更改。每当更改设备航向时,都会打印航向值。

Location location = Location();

location.onLocationChanged.listen((LocationData currentLocation) 
      // Use current location
    print(currentLocation.heading);
);

在此处阅读更多信息:https://pub.dev/packages/location

航向是一个双精度值,从 0 到 360 度不等。 This image will help you to see what heading value means.

【讨论】:

我运行了这段代码,currentlocation.heading 的值一直保持在 90.0。我应该移动我的设备多少才能看到价值的变化?

以上是关于如何在 Flutter 中检测设备运动方向?的主要内容,如果未能解决你的问题,请参考以下文章

如何计算手机从静止垂直方向的运动?

检测加速度计在 y 轴上的运动方向

如何检测 GestureDetector 是不是悬停在 Flutter 中?

如何使用 CoreMotion 在空间中获取设备方向

Flutter:如何防止我的主要小部件旋转并仍然跟踪它的方向?

如何区分方向键运动和操纵杆运动?