Google Nexus 7上的重要运动传感器

时间:2014-12-01 06:01:19

标签: android android-sensors

我试图在移动的汽车中检测Android设备的开始/停止动作。为此,我试图在我的谷歌Nexus 7(2012)平板电脑(Jellybean)上使用重要运动传感器。我使用的参考代码是this

但是,代码从不检测重要动作,SensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION);始终在代码中返回null。

你能否提出我失踪的消息?有没有其他方法可以使用其他传感器检测移动汽车中Android设备的启动/停止运动?

1 个答案:

答案 0 :(得分:1)

  

你可以建议我缺少什么吗?

平板电脑可能无法供应传感器。我发现很多低端平板电脑只提供加速度计。富传感器设备提供5或6个传感器,但我不记得遇到重要运动传感器。

您可以使用以下代码从JNI转储传感器。我不确定你是否会从Java获得相同的结果。我使用此代码对传感器进行采样并为随机数生成器播种,因此我在许多设备上查看了它们。感兴趣的行是int type = ASensor_getType(sensor);

ASensorManager* sensorManager = ASensorManager_getInstance();
int n = ASensorManager_getSensorList(sensorManager, &sensorArray);

for (int i = 0; i < n; i++) {
    const ASensor* sensor = sensorArray[i];
    if (sensor == NULL) continue;

    const char* name = ASensor_getName(sensor);
    int type = ASensor_getType(sensor);
    const char* vendor = ASensor_getVendor(sensor);
    int min_delay = ASensor_getMinDelay(sensor);
    float resolution = ASensor_getResolution(sensor);

    LOG_DEBUG("SensorArray: %s (%s) %d %d %f", name, vendor, type,
                min_delay, resolution);
}

致电int type = ASensor_getType(sensor);后,您可以使用以下功能解码该类型。

static const char* SensorTypeToName(int sensorType) {
    switch (sensorType) {

    /* <ndk root>/.../sensor.h */
    case ASENSOR_TYPE_ACCELEROMETER: /* 1 */
        return "Accelerometer";
    case ASENSOR_TYPE_MAGNETIC_FIELD: /* 2 */
        return "Magnetic field";
    case ASENSOR_TYPE_GYROSCOPE: /* 4 */
        return "Gyroscope";
    case ASENSOR_TYPE_LIGHT: /* 5 */
        return "Light";
    case ASENSOR_TYPE_PROXIMITY: /* 8 */
        return "Proximity";

    /* http://developer.android.com/reference/android/hardware/Sensor.html */
    case 0:
        return "type 0";
    case 3:
        return "Orientation";
    case 6:
        return "Pressure";
    case 7:
        return "Temperature";
    case 9:
        return "Gravity";
    case 10:
        return "Linear acceleration";
    case 11:
        return "Rotation vector";
    case 12:
        return "Relative humidity";
    case 13:
        return "Ambient temperature";
    case 14:
        return "Uncalibrated magnetic field";
    case 15:
        return "Rotation vector";
    case 16:
        return "Uncalibrated gyroscope";
    case 17:
        return "Significant motion";
    case 18:
        return "type 18";
    case 19:
        return "Step counter";
    case 20:
        return "Geo-magnetic rotation vector";
    case 21:
        return "Heart rate";
    default:
        ;
    }
    return "Unknown";
}