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タブレットの方は加速度のみ