365連休

にわかのandroidとかの開発メモ。

Androidには同じタイプのセンサーが複数ある

表題の通り。

Sensorのリスナーでよくあるサンプルコードのようにループで登録しなかったらハマった。

 

//お手本
final List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
for(Sensor sensor:sensors){
    if(sensor.getType()==Sensor.TYPE_MAGNETIC_FIELD){
        //同じタイプのセンサーが複数あるので理にかなった実装
        mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI);
    }
    //他のセンサーも登録できる。
    //else if(sensor.getType(ry
}

「2種類のセンサーが有効だったらセンサーリスナー登録する」っていうコードを書こうと思ったら、最後のセンサーに対してのみregisterListenerしててハマった。

 

磁気センサーとかは固まるやつは、デバイス振ったら動き出すので注意。これもハマった。

 

あとSensorのtoString()はオーバーライドしてあって便利。デバッグログにそのまま使える。

 

全部の地雷を踏みぬいていくスタイル。