真の「ケータイする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 1とAndroid 1.6の組み合わせで操作可能なセンサです。ほかのデバイスだと、また違うセンサが搭載されているかもしれません。
AndroidのセンサをJavaアプリから扱う基礎
個別のセンサの説明に入る前にまず、共通部分について説明します。以下より、今回のサンプルアプリをダウンロードしておいてください。
Androidのセンサは、Android 1.5でJavaの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の温度センサ |
Copyright © ITmedia, Inc. All Rights Reserved.