传感器的返回值始终为0

时间:2017-04-20 14:05:07

标签: android user-interface sensor

我在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();

}

}

提前致谢。

1 个答案:

答案 0 :(得分:1)

默认情况下,您使用altitude初始化了0值,并且您正在更改onSensorChanged中的此值,该值在传感器值已更改时调用,但您尝试在{{}内输出1}}当onCreate可能尚未被召唤并且您收到初始值onSensorChanged时。

尝试在0方法中添加日志,并检查它是否被调用以及返回哪个值。