java如何在请求时仅读取一次Android传感器数据
我试图读取Java 安卓应用程序中的加速度计和/或地磁传感器,以确定设备在某一点的方向。但是传感器本身并不重要,我的问题可以应用到你想读的任何类型的传感器上,无论是运动、温度、光线、压力等等
我在everywhere看到的代码可以设置来自传感器的“数据流”,具有事件侦听器和对传感器通过回调发送给您的数据“作出反应”的能力
这不是我想要的,我想可能不可能做我想做的事
我们需要的是读取传感器数据一次。 不是两次,不是连续3秒,不是传感器向我发送事件时。 打开它,阅读它,关闭它
当我要求阅读时,我只需要一本书。 当我得到那个读数时,我不需要更多的读数
一旦你有了足够的权限,比如anysensor.getCurrentState()
,感觉应该是一个简单的单行操作。
但从我所能阅读的内容来看,我只发现文档依赖于sensorManager中的事件侦听器,并且必须设置整个类和5个不同的事件回调:
https://developer.安卓.com/guide/topics/sensors/sensors_position#sensors-pos-orient
我猜我可以做到,并且尽量使它变得轻,让eventListeners在第一次阅读时自动停止。但它感觉非常整洁,而且有很多代码满足我的需要。我还试图做一个非常简单的任务,阅读一些关于它的东西,并完成它,这需要一些异步的东西。 所以我想我必须“暂停”应用程序,直到我得到第一个结果
这真的是最简单/唯一的方法吗
# 1 楼答案
从这里可以看到,如果不设置eventListeners,就不可能读取传感器数据
Android get sensor data without EventListeners
我现在还没有结束这个问题,以防有人能证实这是事实或其他
如果有人想在同步函数中间集成这个异步步骤的最佳方法,那将是受欢迎的!
# 2 楼答案
我正在为我的问题写一个最终答案,因为我找到了一个适合我的特定用例的解决方案
尽管我的操作不应该是“异步”的,但我最终做的是拆分脚本,以便“job.done();”继续我的脚本的其余部分,使“编码”大部分类似于同步脚本
为了与大家分享,我把大部分东西都去掉了,尽量只保留有趣的部分。我希望这对任何试图做类似事情的人来说都足够了。这也是我找到的访问加速计数据的最短方法
基本上,我的想法是我有一个
switch
,根据结果,我可能需要传感器,也可能不需要传感器(仅保留两个案例来说明我的观点)。 当case
为"portrait"
时,我可以保持所有内容同步,并调用“job.done();”这将继续脚本的其余部分但是,如果
case
是"auto_landscape"
,我想使用传感器。由于我只需要一次读取,当传感器发送其第一次回调(onSensorChanged()
)时,它将注销自身,然后使用相同的job.done();
方法完成脚本这是: