如何在 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】:插件告诉你加速。如果您想检测运动,即速度,您需要将积分过滤器应用于这些事件的数据。您可能想使用UserAccellerationEvent
s,因为它们已经消除了重力。
此外,使用来自陀螺仪的事件将使您的计算更加稳健。
这是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 中检测设备运动方向?的主要内容,如果未能解决你的问题,请参考以下文章
如何检测 GestureDetector 是不是悬停在 Flutter 中?