方位センサです。それぞれのセンサの値は、以下を参照します。
values[0]で東西南北の方位が取れるので、これだけでおおよその方位が分かります。
サンプルを起動して机の上などに置くと、図5のようにロボットは北を指差して回転します。この状態でほかのケータイを近づけると、ロボットが影響を受けて回ることから、先に紹介した磁界センサが内部的に使用されているのだと思います。
void onValueChanged(float[] values) { Canvas canvas = getHolder().lockCanvas(); canvas.drawColor(Color.WHITE); canvas.save(); Matrix matrix = new Matrix(); matrix.setRotate(-values[0], x + bitmap.getWidth() / 2, y + bitmap.getHeight() / 2); canvas.setMatrix(matrix); canvas.drawBitmap(bitmap, x, y, null); canvas.restore(); getHolder().unlockCanvasAndPost(canvas); }
ロボットを回している個所は、こんな感じです。方位の値がちょうど360度で渡されてくるので、扱いが簡単です。第2要素と第3要素の姿勢は、以下のような感じです。
温度センサの値は、以下を参照します。
室温18℃の環境で、Android Dev Phone 1の温度センサは30〜34の範囲で値を取得しました。
ドキュメントには、取得した値の単位が何なのか記載されていませんが、ソースコードをあさったところ、摂氏であることが分かりました。
センサが何の温度を検出しているのかは、Android Dev Phone 1のソースコードが入手できていないため調べられていませんが、検証のために氷点下の屋外に10分ほど放置しておいたところ、−2℃まで下がったので(図7は、1℃)、少なくともAndroid Dev Phone 1の温度センサは外気の影響を受けると思っていいでしょう。
「Javaでハードウェアを制御する」こと自体は、これまでのケータイJavaアプリでも、すでに行われてきたことですが、Androidは扱えるハードウェアが豊富なうえに自由度が高いので、ハードウェアを駆使したアプリが出てきてもおかしくありません。
ハードウェア制御の基本中の基本は、バイブレータですが、これはandroid.os.Vibratorクラスを見てもらえれば、すぐに使い方は分かると思います。そのほかのハードウェアとして、カメラ、GPS、Wi-Fi、Bluetoothなどがありますが、これらについても追って説明していきたいと思います。
Copyright © ITmedia, Inc. All Rights Reserved.