2017-02-20 3 views
0

(Je suis un débutant dans android, s'il vous plaît allez-y doucement sur moi)Accéder à quel point un appareil déplacé à l'aide d'un accéléromètre dans un studio android?

Je fais une application qui nécessite une localisation de précision et de calculer la différence entre deux endroits très proches. Je doute fortement que cette précision soit réalisable avec le GPS, et pour l'instant je travaille avec des téléphones haut de gamme qui ont de bons accéléromètres. Fondamentalement, comment puis-je accéder à combien d'un appareil déplacé, avec une extrême précision?

+1

Avez-vous au moins commencé à jouer avec obtenir l'autorisation d'utiliser les accéléromètres et essayer d'obtenir les distances avec les appareils? Tout code? –

Répondre

1

Vous pouvez commencer avec ceci pour obtenir l'accéléromètre. Je n'ai rien fait avec cette fonctionnalité auparavant.

public class yourActivity extends Activity implements SensorEventListener{ 
private SensorManager sensorManager; 
double ax,ay,az; // these are the acceleration in x,y and z axis 
@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE); 
     sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 
    } 
    @Override 
    public void onAccuracyChanged(Sensor arg0, int arg1) { 
    } 

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     if (event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){ 
      ax=event.values[0]; 
        ay=event.values[1]; 
        az=event.values[2]; 
      } 
    } 
} 

Voici un lien pour un guide qui semble assez complet et pourrait vous aider dans votre cheminement. Using The Accelerometer

1

Il travaillera

private SensorManager sensorMan; 
private Sensor accelerometer; 

private float[] mGravity; 
private float mAccel; 
private float mAccelCurrent; 
private float mAccelLast; 

// In onCreate method 
sensorMan = (SensorManager)getSystemService(SENSOR_SERVICE); 
accelerometer = sensorMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
mAccel = 0.00f; 
mAccelCurrent = SensorManager.GRAVITY_EARTH; 
mAccelLast = SensorManager.GRAVITY_EARTH; 

// And these: 

@Override 
public void onResume() { 
    super.onResume(); 
    sensorMan.registerListener(this, accelerometer, 
     SensorManager.SENSOR_DELAY_UI); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    sensorMan.unregisterListener(this); 
} 

@Override 
public void onSensorChanged(SensorEvent event) { 
    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){ 
     mGravity = event.values.clone(); 
     // Shake detection 
     float x = mGravity[0]; 
     float y = mGravity[1]; 
     float z = mGravity[2]; 
     mAccelLast = mAccelCurrent; 
     mAccelCurrent = FloatMath.sqrt(x*x + y*y + z*z); 
     float delta = mAccelCurrent - mAccelLast; 
     mAccel = mAccel * 0.9f + delta; 
      // Make this higher or lower according to how much 
      // motion you want to detect 
     if(mAccel > 3){ 
     // do something 
     } 
    } 

} 

@Override 
public void onAccuracyChanged(Sensor sensor, int accuracy) { 
    // required method 
}