我在java(Android)中实现了一个类来计算设备的高度,我想从另一个类访问这个值。
第一堂课如下:
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();
}
}
提前致谢。
答案 0 :(得分:1)
默认情况下,您使用altitude
初始化了0
值,并且您正在更改onSensorChanged
中的此值,该值在传感器值已更改时调用,但您尝试在{{}内输出1}}当onCreate
可能尚未被召唤并且您收到初始值onSensorChanged
时。
尝试在0
方法中添加日志,并检查它是否被调用以及返回哪个值。