第6回:Androidアプリで人間・環境をセンシングする

最終更新日:2024年4月30日

ホームへ戻る

本日の提出課題一覧

  1. 演習問題6_1(必須)
  2. 演習問題6_2(必須)
  3. 演習問題6_3(任意)

プロジェクトの作成

Android アプリケーションプロジェクトを作成します。ただし、自分の名前の頭文字・自分の学生番号を使用すること。

下記の属性をもった新しい Android Project を作成する
属性
Name LG Sensor Monitor
Package name jp.aoyama.t23428.lgsensorMonitor
Save location 任意
Language Java
Minimum SDK 使用端末の Android バージョン以下を選択

演習課題6_1: 加速度センサの値取得(必須)

「各センサの共通的な使い方」や「センサデータ取得のための基本コード例」の説明を参考に、以下の内容を実施せよ。

  1. 上記の加速度センサ読み取り設定および、データ読み取りのコードを参考にし、図.2のように加速度センサの3軸の値が表示されるように適切なコードを追加する。x軸に重力加速度がかかるような姿勢でスクリショをとること!
fig1.png
図.1 加速度センサの軸方向
fig2.png
図.2 加速度センサの各軸の値を表示するアプリのスクリーンショット

イントロダクション

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)

各センサの共通的な使い方

センサ操作関連クラス

表1. センサ操作関連クラスとその説明一覧
クラス名 概要
Sensor センサーを表すクラス。 getSensorList(int)を使用して、使用可能なセンサーのリストを取得します。
SensorManager Androidプラットフォーム内で利用可能なセンサーへのアクセスを許可するクラス。
SensorEventListener センサー値が変更されたときにSensorManagerから通知を受信するために使用されるインターフェース。アプリケーションはこのインターフェースを実装して、ハードウェアで利用可能な複数のセンサーを監視することができる。
SensorEvent このクラスはセンサーイベントを表し、センサータイプ(加速度計、向きなど)、タイムスタンプ、精度、センサーのデータなどの情報を保持します。

Androidがサポートするセンサ一覧

Android端末には多くのセンサが搭載されています。どのセンサが搭載されているかはSensorManagerクラスが管理している。SensorManager.getSensorList(int)で扱うことができるセンサのリストを取得できる

表2. Android端末で主にサポートされているセンサ(全端末に全センサされている訳ではない)
種類 センサタイプ(定数)
加速度 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を忘れずに、下記のコードを追加する。

実現するInterfaceの宣言とセンサ読み取り設定
fig1.png

次に読み取り設定したセンサの値を取得する。そのため、上記に追加したonSensorChanged(...)メソッドのSensorEvent型引きすを用いて、下記サンプルコードのように値を取得する。取得できる値の数はセンサの種類によって異なるため、気を付ける必要がある。例えば加速度センサ、ジャイロセンサ等の場合3つの値が取得できるが、温度や照度等の場合は1つの値しかない。

fig1.png

に説明しているように、SensorEventクラスObjectから、読み取り中センサに関する様々な情報(名前、消費電力等々)が取得できる。そのため、onSensorChanged(...)の引数として渡されるSensorEventインスタンスeventからイベントを発したeventのObjectを抽出し、下記の形のようなメソッドを用いる。


                    event.sensor.getXXXX()
                                        

ここでXXXXは取得したい情報に合ったメソッドになるので、上手にコードアシストを活用して、適切なメソッドを見つける。

SensorManagerクラスのregisterListener(...)メソッドの第2引きすを表2にリストしているセンサタイプ(TYPE_ACCELEROMETER、TYPE_GYROSCOPE等々)で適切に設定していれば、読み取り可能にしたいセンサが選定できる。


演習課題6_2: センサの詳細情報取得・表示(必須)

  1. 図.3のように加速度センサの下記詳細情報を取得・表示し、スクリーンショットをとる。
    • 種類、名前、販売先、バージョン、分解能、最大レンジ、消費電力、値。
    • 必要があれば例外処理(Exception)に必要なコードも追加
    • 現在時刻をミリ秒単位で教えてくれるSystem.currentTimeMillis()メソッドを用いて、実際に観測しているサンプリング間隔を算出し、表示する

fig3.png
図.3 加速度センサの詳細な情報取得・表示

演習課題6_3: センサデータのプロット(任意)

HUAWEIタブレットの方は加速度のみ

  1. 図.6のようにボタンにて選択したセンサの値がプロットされるようにする。
fig6.png
図.6 センサの値のプロットができるアプリの例のスクリショ