【问题标题】:Significant Motion Sensor on Google Nexus 7Google Nexus 7 上的重要运动传感器
【发布时间】:2014-12-01 06:01:18
【问题描述】:

我正在尝试在移动的汽车中检测 Android 设备的启动/停止动作。为此,我尝试在我的 Google Nexus 7 (2012) 平板电脑 (Jellybean) 上使用显着运动传感器。我使用的参考代码是this

但是,代码永远不会检测到重大运动,SensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION); 总是在代码中返回 null。

你能建议我缺少什么吗?使用其他传感器在移动的汽车中检测 Android 设备的启动/停止运动的任何其他方法?

【问题讨论】:

    标签: android android-sensors


    【解决方案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";
    }
    

    【讨论】:

    • 感谢此代码。我会在一段时间内检查并更新问题。同时,您是否知道一种方法来检测放置在行驶中的汽车中的 Android 设备上的运动开始/停止?我依靠显着运动传感器来做到这一点,但现在正在寻找另一种选择。我应该为此后续评论提出一个新问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    相关资源
    最近更新 更多