【问题标题】:Android onSensorChanged(SensorEvent event) - Pedometer sensor (Nexus 5)Android onSensorChanged(SensorEvent 事件) - 计步器传感器 (Nexus 5)
【发布时间】:2014-12-13 06:35:55
【问题描述】:

我在 nexus 5 和 oneplus one 手机上使用计步器。他们都有一个名为“Pedometer”的传感器,供应商是“QTI”,sensorType是33171009

在andorid的传感器文档中,没有这种传感器的文档。

SensorEventListener 使用传感器事件调用 public void onSensorChanged(SensorEvent event),其中传感器名称为“计步器”,值是 16 个浮点值的数组。由于没有关于这种类型传感器的文档,我不知道这些值的含义。

如果对象SensorEvent 也告诉我们每个值是什么,那将会很有帮助。相反,您必须在文档中查找 values 数组以查看每个值代表什么。

尽管如此,这个特定的传感器(计步器)在 android 传感器文档中的任何地方都没有提到(至少从我发现的内容来看,如果有人知道它存在于哪里,那将非常有帮助)。

深入研究源代码,我通过原生方法nativeGetNextSensor(Sensor sensor, int next)SystemSensorManager.java 中找到了这个传感器(计步器)的实例化。

由于这种方法,数组的大小为 16:

   static int getMaxLengthValuesArray(Sensor sensor, int sdkLevel) {
        // RotationVector length has changed to 3 to 5 for API level 18
        // Set it to 3 for backward compatibility.
        if (sensor.mType == Sensor.TYPE_ROTATION_VECTOR &&
                sdkLevel <= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            return 3;
        }
        int offset = sensor.mType;
        if (offset >= sSensorReportingModes.length) {
            // we don't know about this sensor, so this is probably a
            // vendor-defined sensor, in that case, we don't know how many value
            // it has
            // so we return the maximum and assume the app will know.
            // FIXME: sensor HAL should advertise how much data is returned per
            // sensor
            return 16;
        }
        return sSensorReportingModes[offset];
    }

有人知道这 16 个浮点值分别代表什么吗?

【问题讨论】:

    标签: android android-sensors sensormanager nexus-5


    【解决方案1】:

    SensorEvent 不告诉您值是什么是有原因的——它不知道。它不能知道。 SensorEvent 是一个通用类——它对可以返回的值的类型一无所知。这允许原始设备制造商添加谷歌在创建 API 时没有想到的新型传感器,同时仍然使用相同的框架。这实际上是使它成为如此酷的 API 的原因。想要连接温度计?你可以这样做。质谱仪?你可以这样做。盖革计数器?你可以这样做。如果您仅限于预定义类型,这将是不可能的,除非您等待 Google 自行更新 Android。

    至于这 16 个值的含义,取决于硬件。某处将有一个 C 或 C++ 驱动程序将该数据提供给 Android 框架,并且该驱动程序可能不是开源的(但也许你很幸运,它是)。我建议去 QTI 的网站,找到他们出售的计步器,并查看硬件文档。虽然它适用于 C 或 C++,但很可能很容易查看它导出的哪些数据将被发送到 java 层。Th

    【讨论】:

    • 是的,我明白了。我的问题是是否有人知道这些值代表什么,而不是为什么 SensorEvent 不告诉我们这些值是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多