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

标签 android android-sensors

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

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

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

最佳答案

Could you please suggest what I'm missing?

平板电脑可能不提供传感器。我发现许多低端平板电脑只提供加速计。传感器丰富的设备提供 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 - Google Nexus 7 上的重要运动传感器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27222537/

相关文章:

android - 使用 gradle build android app 时 Lint 失败

java - iOS 和 Android 的移动设备唯一性

android - 无法创建 SensorDirectChanel

wear-os - 将运动传感器数据从 Android Wear 获取到 Android 手机

android - Android Monkey 测试报告中的 "Event"是什么意思?

android - 无法写入输出 : Too many methods: 66156; max is 65536. By package: android

java - 获取 Galaxy Note 上的内部目录路径

java - 检查 Android 设备有哪些传感器?

android - 在android中查找设备的相对方向

java - 如何在所有 Android 设备上完美检测震动级别?