#android #accelerometer
#Android #акселерометр
Вопрос:
Я программирую приложение, которому необходимо получать данные с датчика акселерометра.
Я перезаписал обе функции onAccuracyChanged () и onSensorChanged(). Предполагается, что эти функции вызываются только при изменении точности или значений датчика, но в моем случае они меняются много раз в секунду и всегда возвращают одни и те же значения.
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
if(sensor.getType()==Sensor.TYPE_ACCELEROMETER){
Log.d(TAG, "Accuracy has changed: " accuracy);
}
}
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
x = event.values[SensorManager.DATA_X];
y = event.values[SensorManager.DATA_Y];
z = event.values[SensorManager.DATA_Z];
Log.d(TAG, "Sensor changed: " event.accuracy ", " x ", " y ", " z);
}
}
Это раздражает, но также раздражает, что точность всегда равна 0 (SensorManager.SENSOR_STATUS_UNRELIABLE), поэтому я не могу ему доверять.
Что может происходить? Устройство Samsung Galaxy S, поэтому у него есть акселерометр.
Спасибо!
Комментарии:
1. точность зависит от аппаратной конфигурации датчика. Вы не можете исправить это своим кодом.
2. Хороший вопрос. Я нахожу то же самое в sony ericson xperia x10 mini pro и в htc desire. Более того, я думаю, что я вижу разную точность при каждом запуске и изменении настроек в своих приложениях..
Ответ №1:
вы можете возвращать значения с плавающей точкой и очень точные, вы можете просто преобразовать их в целое число или даже использовать условие, чтобы получить результат только тогда, когда телефон находится в определенном положении
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
x = event.values[SensorManager.DATA_X];
y = event.values[SensorManager.DATA_Y];
z = event.values[SensorManager.DATA_Z];
if( x > -3 amp;amp; x < 3 amp;amp; y > -3 amp;amp; y < 3 amp;amp; z < -7 amp;amp; z > -13 ){
// this will return value only when the phone is upside down on the table
// u can set as ur own liking
Log.d(TAG, "Sensor changed: " event.accuracy ", " x ", " y ", " z);
}
}
}