Не могли бы вы предложить, что мне не хватает?
Планшет, вероятно, не снабжает датчик. Я обнаружил, что многие низкоконтрастные таблетки обеспечивают только акселерометр. Устройства с богатым сенсором поставляют 5 или 6 датчиков, но я не помню, чтобы через Сенсор Significant Motion.
Вы можете использовать следующий код для сброса датчиков из 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, размещенном в движущейся машине? Я полагался на Significant Sensor Motion Sensor, но теперь я ищу еще один вариант. Должен ли я поднимать новый вопрос для этого последующего комментария? – stackoverflowN