2017-02-20 3 views
0

(私はアンドロイドの初心者です。)アンドロイドスタジオの加速度計を使用してデバイスがどれだけ移動したかにアクセスしますか?

私は正確な位置を特定し、2つの非常に近い場所の差を計算する必要があるアプリを作っています。私はこの精度がGPSで達成可能であることを非常に疑っています。今のところ、私は良い加速度計を備えたハイエンドの携帯電話で作業しています。基本的に、デバイスの移動量に極端な精度でアクセスするにはどうすればよいですか?

+1

あなたは、少なくとも加速度計を使用する許可を取得し、デバイスとの距離を取得しようと周りにプレイし始めている動作しますか?任意のコード? –

答えて

1

これで始めることができますが、加速度計を入手するだけです。私は以前この機能で何もしていません。

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]; 
      } 
    } 
} 

ここでは、ガイドのリンクがあり、かなり徹底しているように見え、パスを救うのに役立つかもしれません。 Using The Accelerometer

1

それは

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 
} 
関連する問題