デバイスが上を向いているかどうかを検出したい。(角度はありませんが、地面に対して平らになります)。
上向きの一部のデバイスでは、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()は、Nexus7に対して19.6133を返します。どのセンサーが戻ることはありません。
注#2
デバイスを振ると、z_valueは少し高くなる傾向があります(場合によっては8〜8.5)。デバイスを着実に傾けると、z_valueは8(最大)に達しません。