2017-04-20 12 views
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(); 

} 

}

おかげ。デフォルトでは

答えて

1

0で初期化されますaltitude値と、あなたは、センサの値が変更されたときに呼び出されるが、onSensorChangedはおそらくまだ呼び出されていないとあなたがいるときにonCreate内の出力にそれをしようとしているonSensorChangedでこの値を変更していますあなたの初期値0を受け取ります。

onSensorChangedメソッド内にログを追加し、呼び出されているかどうか、およびその戻り値を確認してください。

+0

ご返信ありがとうございます。問題はonSensorChangedメソッドであり、呼び出されず、戻り値は常に0(初期値)です。 – Wima

+0

実際、問題は "getAltitude()"メソッドであり、高度値を返しません。 – Wima

+0

@Wimaあなたはこのリンクをチェックすることができますhttp://stackoverflow.com/questions/7410095/android-is-there-a-way-to-obtain-altitude-aside-from-location-getaltitude-iそしてあなたのコードと比較してくださいたぶんあなたはいくつかの間違いをしました –

関連する問題