2011年10月06日

Android センサーについて

Androidアプリでちとセンサーを使うことになって色々調べてるんだが、チト面倒な事になってるっぽい。
2.1以前はSensor.TYPE_ORIENTATIONという種類のフラグがあって比較的簡単に傾きセンサーを使用できたのだが、2.2から非推奨になってしまっている。

でどうするか。
答えは

TYPE_ACCELEROMETER

TYPE_MAGNETIC_FIELD
センサーで得た値から計算して出す

ソースは色々乗ってて、
http://www.binzume.net/diary/2010-07
とか
http://techbooster.jpn.org/andriod/ui/443/
にやり方が書いてある。

ただ、センサー系で一番めんどくさいのが、センサーが果たして正常に動いてるかどうかわかり辛い事。
オフィシャルページに色々載って入るのだが、全くわからん

色々探しまわって漸く見つけたサイトによると、SensorManager.remapCoordinateSystemのパラメータを調整してアプリ用に合わせないといけないっぽい。

自分の場合は、
・Portrait限定
・ピッチ、ロールさえとりあえずわかればいい。
・ケータイを水平に置く事を想定。


普通にオフィシャルページに載ってるように、
SensorManager.remapCoordinateSystem(inR, SensorManager.AXIS_X, SensorManager.AXIS_Z, outR);
とするだけではトチ狂った値が返ってくる。水平に置いても0近くの値になる変数は無い。やれやれw

これを
SensorManager.remapCoordinateSystem(inR, SensorManager.AXIS_X, SensorManager.AXIS_Y, outR);
とすると、
SensorManager.getOrientation(outR, orientationValues);後のorientationValuesの値は、

orientationValues[0]:Z軸(方位), azimuth; ケータイを水平に持った場合スクリーンに垂直線を立てた軸を中心に回る角。
orientationValues[1]:X軸(仰角), pitch; ケータイに横に線を引いた軸を中心に前後に傾けた場合の角。
orientationValues[2]:Y軸(ロール角), roll; ケータイに縦に線を引いた軸を中心に左右に傾けた場合の角。

ケータイを水平に持った場合の方位、仰角、ロール角に付いてどこにもわかりやすく書いてなかったので、馬鹿な俺でもわかるように説明。^^;

とりあえずこれでゲーム系は色々出来そう。V
ラベル:android センサー
posted by 1.618 at 21:40| Comment(0) | Android | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。