下林明正のブログ

個人的かつ雑多なブログです。

Androidのセンサーの精度の設定について

完全に憶測で書いているので注意するように。


iPhoneより多彩なAndroidのセンサをアプリで操作 (2/3) - @IT をなどを見るとSENSOR_DELAY_NORMALなどといったかたちで指定する遅延時間について書いてある。 遅延時間ということは、今まで何も考えずになんとなくそのまま遅延する時間のことだと思っていたけれど、実際のニュアンスとちょっと違う、ような気がする(というかそもそも、遅延する、ってどういうことだ?)。

具体的には、これはポーリングのインターバルである、というような気がしている。

どういうことかというと、

  • 0ms: 0
  • 60ms: 1
  • 120ms: 1
  • 180ms: 0
  • 240ms: 0

みたいな入力があったとき、SENSOR_DELAY_UIなら1であった瞬間を検知することができるけど、 SENSOR_DELAY_NORMALの場合は検知できない、ということだ。

もしそうであれば、走っているかどうかを判定したいとか、そういう恒常的に加速度がかかりつづけるものに関してはSENSOR_DELAY_NORMALのようにポーリング間隔が長いものでも問題ないと思うけど、端末が叩かれたかどうかというようなワンショット系の判定をしたい場合にはあまりポーリング間隔が長すぎると検知できないということになる。

実際のところきちんと検証していないのでよく分からないのだけど、なんとなくそういう気がしているのでメモしておく。

普通に実装していたら、こうなりそうだなあ、とも思う。 ところどころ説明が「遅延時間」だったり「精度」だったりするのも胡散臭い。

ちなみに、俗に言う1フレが16ms相当なので、普通はSENSOR_DELAY_GAMEを使っていれば問題の起こるケースは殆ど無いと思います(しかし、頑張ってAndroidで60FPSのゲームを作ったら必ず1フレ入力が遅延することになる)。