我想检测设备是否朝上。(不成角度,但朝上与地面平齐)。
在某些面向上的设备上,z 值将返回 9~10 之间的值。(大多数设备)
但是,在 Nexus 7 上,对于朝上,z 值将返回 6~8 之间的值。
我的代码是:
if(z_value > 9.0) {
// device facing up
}
else {
// device is in angled
}
但是,上面的代码不再起作用。由于 Nexus7 没有达到 z_value 9。
如何检测设备是否(完全)朝上。(不问 z_value > 0)
我的完整代码如下:
@Override
protected void onStart() {
super.onStart();
try {
sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
if(sensorList.size() > 0){
accelerometerPresent = true;
accelerometerSensor = sensorList.get(0);
}
else{
accelerometerPresent = false;
}
if(accelerometerPresent){
sensorManager.registerListener(accelerometerListener, accelerometerSensor, SensorManager.SENSOR_DELAY_UI);
}
} catch(Exception e) {}
}
private SensorEventListener accelerometerListener = new SensorEventListener(){
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {}
@Override
public void onSensorChanged(SensorEvent arg0) {
float z_value = arg0.values[2];
Log.d("test", "z:" + z_value);
}};
注意 #1
arg0.sensor.getMaximumRange() 为 Nexus 7 返回 19.6133。哪个传感器永远不会返回。
注意#2
如果你摇动设备,z_value 往往会稍微高一点(有时是 8~8.5)。如果您稳定地倾斜设备,z_value 不会达到 8(最大值)。