gpt4 book ai didi

java - 仅在用户移动时运行服务以收集传感器数据

转载 作者:行者123 更新时间:2023-12-04 23:40:43 27 4
gpt4 key购买 nike

我想在用户移动/手机不静止时跟踪传感器数据(加速度计、陀螺仪)。
我能做的事情:

  • 使用 Sensor Listener
  • 收听传感器数据

            sensorManager = getSystemService(SENSOR_SERVICE) as SensorManager

    val accelerometerSensor =
    sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)

    sensorManager.registerListener(
    accSensor,
    accelerometerSensor,
    SensorManager.SENSOR_DELAY_NORMAL
    )
  • 运行始终在后台运行的前台服务,以跟踪传感器,即使该应用程序已从最近的应用程序中删除

  • serviceIntent = Intent(context, SensorService::class.java)
    context.startForegroundService(serviceIntent)
  • 应用程序重新启动后立即使用广播监听器启动服务,这些监听器监听启动完成事件。

  • 但我无法:
  • 停止在设备停止移动时收集传感器数据的传感器服务。
  • 当用户的设备开始移动并收集传感器数据时启动传感器(未运行)。

  • 从系统接收运动开始和运动结束通知/回调的方式可能是什么,以便我们可以决定启动/结束前台服务。

    最佳答案

    评论太大了,所以我将其发布为答案。这在某种程度上是一个答案,但没有证据,只是我的经验。
    我绝不是Android专家。但我一般对传感器了解一两件事。最主要的是它们始终处于 Activity 状态(如果没有完全关闭),并且总是有一些 噪音 .所以

  • 不能百分百确定是否有任何动静。相反,你 需要要收集所有事件,请选择您的 阈值 自己决定 . (可能您希望汇总来自多个传感器的测量结果来做出决定,甚至考虑测量历史 - 例如,如果用户在崎岖不平的道路上开车,噪音会在很长一段时间内更高)。
  • 如果相应的代码将由操作系统或您的服务执行,那么能耗几乎没有差异。但是有更多的机会可以使用您的代码自定义阈值、聚合和其他逻辑。这就是为什么我相信操作系统将 API 保持在最低限度,并且没有像 moving starts 这样的事件。/moving stops .
  • 唯一消耗能量高于最小值的是您的代码 .没有其他人,但是您的代码决定是否通过持续不断的通知流来惹恼用户。

  • 因此,考虑聚合策略和阈值,如果未通过阈值,则不要显示通知,并使您的代码快速(这样它就不会消耗太多能量)。你已经完成了......或多或少......因为这些决定并不容易做出。大公司的许多应用程序在所有情况下都无法使它们正确。只需安装几个计步器应用程序,您就会发现它们都会显示不同的步数。

    关于java - 仅在用户移动时运行服务以收集传感器数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69437659/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com