我试图在移动的汽车中检测Android设备的开始/停止动作。为此,我试图在我的谷歌Nexus 7(2012)平板电脑(Jellybean)上使用重要运动传感器。我使用的参考代码是this。
但是,代码从不检测重要动作,SensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION);
始终在代码中返回null。
你能否提出我失踪的消息?有没有其他方法可以使用其他传感器检测移动汽车中Android设备的启动/停止运动?
答案 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";
}