2
デバイスの高度を計算するためにjava(Android)でクラスを実装しましたが、別のクラスからこの値にアクセスしたいとします。次のようにセンサーの戻り値は常に0です
最初のクラスは、次のとおりです。
public class DeviceAltitudeHandler extends Activity implements SensorEventListener{
SensorManager sm;
Sensor sensor;
float altitude ;
public DeviceAltitudeHandler(SensorManager sm, float altitude) {
super();
this.sm = sm;
this.altitude = altitude;
sensor = sm.getDefaultSensor(Sensor.TYPE_PRESSURE);
sm.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI);
}
@Override
public void onSensorChanged(SensorEvent event) {
float [] values = event.values;
altitude = SensorManager.getAltitude(SensorManager.PRESSURE_STANDARD_ATMOSPHERE,values[0]);
}
public float getAltitude() {
return altitude;
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void start() {
sm.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI);
}
public void stop() {
sm.unregisterListener(this);
}
}
私はバロメーターを統合したが、戻り値は常に0である本当のスマートフォンを使用しています!第二のクラスのコードは次のとおり予め
public class TestActivity extends Activity {
TextView tv;
DeviceAltitudeHandler dah;
float altitude;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
tv = (TextView) findViewById(R.id.textView5);
SensorManager sm = (SensorManager) getSystemService(Service.SENSOR_SERVICE);
dah = new DeviceAltitudeHandler(sm,altitude);
tv.setText(""+dah.getAltitude());
}
@Override
protected void onResume() {
super.onResume();
dah.start();
}
@Override
protected void onPause() {
super.onPause();
dah.stop();
}
}
おかげ。デフォルトでは
ご返信ありがとうございます。問題はonSensorChangedメソッドであり、呼び出されず、戻り値は常に0(初期値)です。 – Wima
実際、問題は "getAltitude()"メソッドであり、高度値を返しません。 – Wima
@Wimaあなたはこのリンクをチェックすることができますhttp://stackoverflow.com/questions/7410095/android-is-there-a-way-to-obtain-altitude-aside-from-location-getaltitude-iそしてあなたのコードと比較してくださいたぶんあなたはいくつかの間違いをしました –