Android onSensorChanged(SensorEvent事件) - 计步器传感器(Nexus 5)

时间:2014-12-12 21:43:38

标签: android android-sensors sensormanager nexus-5

我正在使用nexus 5上的计步器和一个oneplus的手机。他们都有一个名为"计步器"的传感器,供应商是" QTI&#34 ;, sensorType是33171009

根据andorid的传感器文档,没有此类传感器的文档。

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

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

尽管如此,这个特殊的传感器(计步器)在android传感器文档中没有提到(至少从我发现的内容,如果有人知道它存在的位置会非常有用)。 / p>

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

由于这种方法,数组的大小为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个浮点值中的每一个代表什么?

1 个答案:

答案 0 :(得分:-1)

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

至于那16个值是什么意思 - 它将取决于硬件。在某个地方会有一个C或C ++驱动程序将这些数据提供给Android框架,而且该驱动程序可能不是开源的(但也许你很幸运,而且确实如此)。我建议去QTI的网站,查找他们销售的计步器,并查看硬件文档。虽然它将用于C或C ++,但它可能很容易看到它导出的数据将被发送到java层。那么