2017-04-20 1 views
2

java (Android) 클래스를 구현하여 장치의 고도를 계산했으며 다른 클래스에서이 값에 액세스하려고합니다. 다음과 같이센서의 반환 값은 항상 0입니다.

첫 번째 클래스입니다 : 나는 기압계하지만 반환 값은 항상 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); 
} 

} 

! 두 번째 클래스의 코드는 다음과 같습니다

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

당신이 altitude 값이 0로 초기화하고 센서 값이 변경되었을 때 호출되는 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 귀하의 코드와 비교하십시오 어쩌면 당신은 실수를했습니다 –