我正在尝试检测行驶中的汽车中 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/