2011-05-16 2 views
2

Je programme une application qui doit extraire des données du capteur de l'accéléromètre.La précision est toujours 0 dans SENSOR_ACCELEROMETER (Android)

J'ai écrasé les fonctions onAccuracyChanged() et onSensorChanged(). Il est supposé que ces fonctions ne sont appelées que lorsque la précision ou les valeurs du capteur changent, mais dans mon cas elles changent plusieurs fois par seconde, et retournent toujours les mêmes valeurs.

@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); 
    }  
} 

C'est gênant, mais il est aussi ennuyeux que la précision est toujours 0 (SensorManager.SENSOR_STATUS_UNRELIABLE), donc je ne peux pas lui faire confiance.

Que peut-il se passer? L'appareil est un Samsung Galaxy S, il a donc un accéléromètre.

Merci!

+0

précision dépend de la configuration matérielle de capteur.Vous ne pouvez pas le réparer par votre code. – AndroidCrazy

+0

Bonne question. Je trouve la même chose dans Sony Ericsson xperia x10 mini pro et sur le désir htc. De plus, je pense que je vois une précision différente chaque fois que je cours et que je change de réglage dans mes applications. – quinestor

Répondre

0

u peut la valeur retournée est en valeur flottante et très précis u peut simplement les convertir en entier ou même utiliser la condition pour obtenir le résultat que lorsque le téléphone en position spécifique

@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 && x < 3 && y > -3 && y < 3 && z < -7 && 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); 
     } 
    }  
}