2014-09-03 3 views
3

Я работаю с датчиками Android. <sensor.h> имеет:Сенсорный датчик Android 3?

enum { 
    ASENSOR_TYPE_ACCELEROMETER  = 1, 
    ASENSOR_TYPE_MAGNETIC_FIELD  = 2, 
    ASENSOR_TYPE_GYROSCOPE   = 4, 
    ASENSOR_TYPE_LIGHT    = 5, 
    ASENSOR_TYPE_PROXIMITY   = 8 
}; 

Когда я сбросить датчики с ASensorManager_getSensorList на HTC EVO, я получаю:

SensorList: BMA150 3-axis Accelerometer (Bosh), 1 
SensorList: AK8973 3-axis Magnetic field sensor (Asahi Kasei), 2 
SensorList: AK8973 Orientation sensor (Asahi Kasei), 3 
SensorList: CM3602 Proximity sensor (Capella Microsystems), 8 
SensorList: CM3602 Light sensor (Capella Microsystems), 5 

Когда я пересечь enums в список, по-видимому датчик типа 3 ориентации.

Вопрос: Будет ли датчик ориентации всегда иметь тип датчика 3? Или это изменится в зависимости от производителя?


Редактировать: А вот свалка от ASUS TF-101 таблетки:

SensorList: MPL rotation vector (Invensense), 11 
SensorList: MPL linear accel (Invensense), 10 
SensorList: MPL gravity (Invensense), 9 
SensorList: MPL Gyro (Invensense), 4 
SensorList: MPL accel (Invensense), 1 
SensorList: MPL magnetic field (Invensense), 2 
SensorList: MPL Orientation (Invensense), 3 
SensorList: Lite-On al3000a Ambient Light Sensor (Lite-On), 5 

Ориентация в 3 раз, но есть несколько дополнительных датчиков.


Редактировать: А вот свалка из таблетки Зеки TBQG 1084B:

SensorList: STK831x accelerometer (Sensortek) 1 10000 1.000000 

Нет ориентации (и только один датчик не является своего рода дешево, я думаю, его для игр).

+0

это, возможно, другое, но если вы используете Sensor.TYPE_ACCELEROMETER, он будет похож, значения могут быть изменены. –

ответ

2

Enum предназначен для типов датчиков, и каждый тип должен всегда иметь одинаковую численную ценность на всей платформе. Поэтому, независимо от того, какой тип устройства или поставщик, если он получил гироскоп, его всегда следует указывать как ASENSOR_TYPE_GYROSCOPE, который в конце концов равен 4. Если вы видите гироскоп по-разному на устройстве, то это ошибка, то есть на драйверах низкого уровня на этом устройстве и, скорее всего, будет исправлена ​​с помощью следующего обновления прошивки или так далее.

Эти значения должны оставаться неизменными на каждом устройстве, иначе ваше приложение не сможет действительно функционировать. Было бы огромной болью разработать для датчиков, если типы не будут унифицированы, поскольку исполняемые двоичные файлы работают с числовыми значениями, а не ENUMs/define и т. Д. И главное - иметь ENUM - использовать их вместо окончательных значений, чтобы сделать ваш код более читаемым. Это более ясно, что код делать, когда вижу то

if(sensor == ASENSOR_TYPE_GYROSCOPE) 

чем

if(sensor == 4) 

Как для датчика ориентации и его отсутствующей записи ENUM - это датчик was deprecated in API8 и вам рекомендуется теперь использовать магнитный датчик поля и акселерометр для получения эквивалентной функциональности (see example implementation), так что , скорее всего, причина исчезла с ENUM.

1

Похоже, что заголовки NDK просто устарели. Документы Java, похоже, имеют [текущий] список датчиков и их значения типа в Sensor class.

Я представляю, что эти два списка были последовательными в прошлом.

Смежные вопросы