2015年6月7日日曜日

Android Sensor の間隔を調整したい。

やりたかったこと。
AndroidのSensorを使って磁力を取得するプログラムをつくったのですが、
取得するタイミングをもっと遅くしたいなぁと思いました。たとえば、1秒ごととか5秒ごととか。

調べてみると、registerListener()の引数で、任意の値を設定できる。ことがわかったんだけど、
自分の端末(Androidバージョン2.3.5)では動作しませんでした。

Androidのデベロッパーサイトをみると、2.3 (API level 9) から使えることになってるので、
動いてもよさそう、、、だけど効かない。

ためしに、別の端末(Androidバージョン4.4.2)で、試したところ、設定通りに動作しました。
2.3.5ではあきらめることに。

調べて分かったことを記録しておきます。
わかったこと(1)
Androidのデベロッパーサイトを見ると、Android2.3から、registerListenerの引数に、μ秒を指定できるという記載がある。
サイトのリンク


わかったこと(2)
定義済みのSENSOR_DELAY_*の値は、SensorManager.javaで実装されている。
   private static int getDelay(int rate) {
        int delay = -1;
        switch (rate) {
            case SENSOR_DELAY_FASTEST:
                delay = 0;
                break;
            case SENSOR_DELAY_GAME:
                delay = 20000;
                break;
            case SENSOR_DELAY_UI:
                delay = 66667;
                break;
            case SENSOR_DELAY_NORMAL:
                delay = 200000;
                break;
            default:
                delay = rate;
                break;
        }
        return delay;
    }