Android アプリケーションプロジェクトを作成します。ただし、自分の名前の頭文字・自分の学生番号を使用すること。
| 属性 | 値 |
|---|---|
| Name | LG Sensor Monitor |
| Package name | jp.aoyama.t23428.lgsensorMonitor |
| Save location | 任意 |
| Language | Java |
| Minimum SDK | 使用端末の Android バージョン以下を選択 |
「各センサの共通的な使い方」や「センサデータ取得のための基本コード例」の説明を参考に、以下の内容を実施せよ。
2014 年 3 月に、Android プラットフォームをウェアラブル端末に拡張する「Android
Wear」が発表され、ヘルスケアの観点からウェアラブル端末搭載のセンシング技術が
重要な位置付けになることが予想されている。Android は、スマートフォンだけではな
く、すでに組み込みデバイスにも採用されて、いろいろなところで使われているという
こともあって、センシング技術は、Android1.x からサポートされてきた。ウェアラブル端
末や IoT が注目を浴びる中、Android のセンシング技術も注目されている。
今回は Android 5.x のセンサの取り扱い方について勉強するが、基本的に Android2.x
以降と同じと考えて良い。
Android でセンサを扱うための基本と、タブレット、スマートフォンや、ウェアラブル端末
でよく使われる加速度センサ、照度センサ、重力センサ、ジャイロスコープを例にアプ
リで使う方法について勉強する(実験で利用する端末 Nexus 7 搭載センサに限定)。
(https://developer.android.com/guide/topics/media/media-formats?hl=ja)
| クラス名 | 概要 |
|---|---|
| Sensor | センサーを表すクラス。 getSensorList(int)を使用して、使用可能なセンサーのリストを取得します。 |
| SensorManager | Androidプラットフォーム内で利用可能なセンサーへのアクセスを許可するクラス。 |
| SensorEventListener | センサー値が変更されたときにSensorManagerから通知を受信するために使用されるインターフェース。アプリケーションはこのインターフェースを実装して、ハードウェアで利用可能な複数のセンサーを監視することができる。 |
| SensorEvent | このクラスはセンサーイベントを表し、センサータイプ(加速度計、向きなど)、タイムスタンプ、精度、センサーのデータなどの情報を保持します。 |
Android端末には多くのセンサが搭載されています。どのセンサが搭載されているかはSensorManagerクラスが管理している。SensorManager.getSensorList(int)で扱うことができるセンサのリストを取得できる
| 種類 | センサタイプ(定数) |
|---|---|
| 加速度 | TYPE_ACCELEROMETER |
| 周辺温度 | TYPE_AMBIENT_TEMPERATURE |
| 重力 | TYPE_GRAVITY |
| ジャイロスコープ | TYPE_GYROSCOPE |
| 輝度(照度) | TYPE_GYROSCOPE |
| 重力加速度を除いた加速度 | TYPE_GYROSCOPE |
| 磁界(磁気) | TYPE_GYROSCOPE |
| 方位 | TYPE_GYROSCOPE |
| 気圧 | TYPE_PRESSURE |
| 近接 | TYPE_PROXIMITY |
| 温度 | TYPE_RELATIVE_HUMIDITY |
| 回転ベクトル | TYPE_ROTATION_VECTOR |
| ステップカウンター | TYPE_STEP_COUNTER |
| ステップ感知 | TYPE_STEP_DETECTOR |
第1ステップはSensorManagerのインスタンスを生成し、Activityをセンサ読み取りActivityに設定し、読み取りたいセンサを設定すること。そのため、センサ関連クラスのimportを忘れずに、下記のコードを追加する。
次に読み取り設定したセンサの値を取得する。そのため、上記に追加したonSensorChanged(...)メソッドのSensorEvent型引きすを用いて、下記サンプルコードのように値を取得する。取得できる値の数はセンサの種類によって異なるため、気を付ける必要がある。例えば加速度センサ、ジャイロセンサ等の場合3つの値が取得できるが、温度や照度等の場合は1つの値しかない。
に説明しているように、SensorEventクラスObjectから、読み取り中センサに関する様々な情報(名前、消費電力等々)が取得できる。そのため、onSensorChanged(...)の引数として渡されるSensorEventインスタンスeventからイベントを発したeventのObjectを抽出し、下記の形のようなメソッドを用いる。
event.sensor.getXXXX()
ここでXXXXは取得したい情報に合ったメソッドになるので、上手にコードアシストを活用して、適切なメソッドを見つける。
SensorManagerクラスのregisterListener(...)メソッドの第2引きすを表2にリストしているセンサタイプ(TYPE_ACCELEROMETER、TYPE_GYROSCOPE等々)で適切に設定していれば、読み取り可能にしたいセンサが選定できる。
HUAWEIタブレットの方は加速度のみ