iPhoneより多彩なAndroidのセンサをアプリで操作Androidで動く携帯Javaアプリ作成入門(13)(1/3 ページ)

» 2010年01月15日 00時00分 公開
[緒方聡株式会社イーフロー]

真の「ケータイするGoogle」端末「Nexus One」登場!

 グーグルがGoogleブランドでケータイを作成しました。その名も「Nexus One」です(参考:Google、Android 2.1搭載の“スーパーフォン”「Nexus One」を発表)。

 Nexus Oneは、スペックもさることながら、搭載されているAndroidのバージョンが2.1であることの方が開発者としては注目です。Android 2.1は、早速SDKもリリースされ、エミュレータ上で新機能が利用できます。

 Android 2.1の新機能は、次回紹介する予定です。

 今回は、目先を変えて、Androidのセンサの使い方を紹介します。センサはAndroidの実機がないと動作確認ができないので、開発のハードルが少し高いかもしれませんが、将来Androidの実機を入手したときのために、参考にしておいてください。

iPhoneより多彩なセンサを使って一味違うアプリを

 Androidがサポートしているセンサは、以下のとおりです。

定数 概要
Sensor.TYPE_ACCELEROMETER 加速度センサ
Sensor.TYPE_MAGNETIC_FIELD 磁界(磁気)センサ
Sensor.TYPE_ORIENTATION 方位センサ
Sensor.TYPE_GYROSCOPE ジャイロセンサ
Sensor.TYPE_LIGHT 輝度(照度)センサ
Sensor.TYPE_PRESSURE 圧力センサ
Sensor.TYPE_TEMPERATURE 温度センサ
Sensor.TYPE_PROXIMITY 近接センサ
表1 Androidがサポートしているセンサ一覧

 一覧には、今回取り上げないセンサも含まれています。この一覧を見ると、ケータイにとって必要不可欠なセンサというものは特になく、「ケータイは、もはや通話メールだけではなく、これほどまでのことが行えるプラットフォームになったのだな」としみじみ感じさせられます。

 2010年1月現在のiPhone 3GSで使えるのは、加速度・方位・ジャイロ・輝度・近接センサなので、Androidがいかにさまざまな可能性を秘めているかよく分かると思います。

 今回使い方を紹介するセンサは、以下になります。

  • 3-axis Accelerometer sensor加速度センサ
  • 3-axis Magnetic field sensor磁界センサ
  • Orientation sensor方位センサ
  • Temperature sensor温度センサ

 これらは、Android Dev Phone 1Android 1.6の組み合わせで操作可能なセンサです。ほかのデバイスだと、また違うセンサが搭載されているかもしれません。

AndroidのセンサをJavaアプリから扱う基礎

 個別のセンサの説明に入る前にまず、共通部分について説明します。以下より、今回のサンプルアプリをダウンロードしておいてください。

 Androidのセンサは、Android 1.5JavaのAPIが変わりました。古いAPIも引き続き使用できますが、Android 1.5以降向けには新しいAPIを使用した方がいいので、今回は新しいAPIのみ説明します。

SensorManagerの取得

 センサを使用するには、まずSensorManagerを取得します。

SensorManager manager = (SensorManager)getSystemService(SENSOR_SERVICE);

 上記のように、getSystemService()にSENSOR_SERVICEを渡して取得します。

センサの状態を取得するためのリスナを実装

 次に、センサの状態を取得するためのリスナを実装します。

public void onAccuracyChanged(Sensor sensor, int accuracy);
public void onSensorChanged(SensorEvent event);

 SensorEventListenerの上記2つのメソッドを実装します。

 onAccuracyChanged()は、センサの精度が変更された際に呼び出され、onSensorChanged()はセンサの値が変更された際に呼び出されます。確認した限り、Android Dev Phone 1のonAccuracyChanged()は、精度が変更されなくても呼び出されるため、使い道がありません。

センサオブジェクトを取得

 続いて、センサオブジェクトを取得します。

List<Sensor> sensors = manager.getSensorList(Sensor.TYPE_TEMPERATURE);

 getSensorList()の引数に、表1「Androidがサポートしているセンサ一覧」の定数を渡します。種類ごとではなく、すべてのセンサを取得したいのであれば、Sensor.TYPE_ALLを渡します。

 なお、センサはリスト(List型)で返されます。例えば、上記コードは温度センサを取得しますが、1つのデバイスに2つの温度センサが搭載されている場合、リストには2つのセンサオブジェクトが格納されて返されます(例えば、据え置きタイプのフォトフレームで、室内用と屋外用の温度センサを持つもの、など)。

 次ページでは、引き続きAndroidのセンサの使い方の基本を確認し、加速度センサと磁界センサを操作しましょう。

コラム 「センサの種類も識別できる」

センサの種類を識別するには、Sensor#getVendor()、Sensor#getName()、Sensor#getVersion()などを使用するといいでしょう。

ちなみに、Android Dev Phone 1に搭載されている温度センサのベンダや名前、バージョンは以下の通りです。

ベンダ The Android Open Source Project
名前 AK8976A Temperature sensor
バージョン 1
表2 Android Dev Phone 1の温度センサ

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。