Android

Android+Kotlinで加速度センサーをグラフ化〜MPAndroidChart

投稿日:2018年6月26日 更新日:

環境

Android Studio 3.1.3
Galaxy S5

Androidのセンサーについて

アンドロイドのセンサーは大きく3つに分けられて、動きセンサー(加速度など)、環境センサー(温度など)、位置センサー(GPSなど)がある.
今回は、このうち動きセンサーの中の加速度センサーを使った.

アンドロイドのセンサーの使い方は、センサーフレームワークをつかう.
センサーフレームワークの部品は4つで、SensorManager、Sensor、SensorEvent、SensorEventListner.
これらの部品をつかって、2つのことをおこなう.1つは、センサー機能の特定、2つ目は、センサーイベントの監視

センサー機能の特定

最初に、使うセンサー機能を特定する.

まず、デバイスのContextを与えて、デバイスマネージャーをインスタンス化する.

次に、センサー機能を特定する.

kotlinリファクタリング lateinit

classのプロパティなどで、onCreate内で初期化したい場合、いったん?でnullを許して、その後、初期化するのは冗長.
そこで、lateinit宣言をしておけば、あとから任意のタイミングで初期化できる.

センサーイベントの監視

センサーイベントの監視は、適当なところでリスナーを設定する.

そして、onSensorChangedとonAccuracyChangedの2つのメソッドをオーバーライドする.
(今回はonAccuracyChangedは使わない.)

加速度センサーは、いろいろなモーションセンサーのもとになる数値.
基本的には、名前の通りn軸への加速度を検出する.
そのほかに、重力加速度の影響を受けて(?)、下方向に8-9の加速度を検出する.これでデバイスの向きを検知できる.
このうち、重力のみを検知するのがTYPE_GRAVITY、重力を除いた加速度のみを検知するのがTYPE_LINEAR_ACCERALERATION.

センサー利用の際の注意点

ベスト・プラクティスとして書かれていること

センサーリスナーを必ず解除する

onSensorメソッドをブロックしない

onSensorメソッドは頻繁に呼び出されるメソッドなので、重い処理をさせないように注意する.

廃止予定のセンサーはつかわないようにする

バージョンアップでアプリが使えなくなるので

センサーを使う前に存在するか確認すること

センサーが存在しないデバイスもあるので

SENSOR_DELAYは慎重に選択すること

バッテリー消費が大きくなるので

MPAndroidChart

MPAndroidは、アンドロイド用のチャート表示ライブラリ.

まず、gradle.bundle(プロジェクト)にmaven…を追記する.

次に、gradle.bundle(モジュールfeature)に、 implementation ‘com.github.PhilJay:MPAndroidChart:v3.0.3’を追記する.
(gradleの仕組みがよくわかってないけど、ここに書かないとライブラリを認識しなかった.)

チャートの準備

まず、view.xmlにチャートを描画する場所をつくる.

つぎに、チャートのデータの準備.描画するデータは3軸分あるので、3つのデータセットを用意する.
kotlinでは、インスタンス化にnewをつけない.
あと、値をどこかからとってきた場合はnullじゃないか確認して!!をつける.

kotlinリファクタリング スコープ関数 apply


初期設定には、スコープ関数applyでまとめて初期化できる.

また、内容が変化しない変数はvalにする.

チャートのリアルタイム描画

データをaddEntryして、notifyDataChangeして、invalidate(リフレッシュ)する.
ここでは、moveViewToXメソッド内でinvalidateしてる.

kotlinリファクタリング run

スコープ関数runでまとめてメソッドを実行できる.

こんな感じ

情報

-Android
-, , ,

執筆者:

関連記事

AndroidStudioでAndroid+kotlinに入門

By: Raita Futo – CC BY 2.0 目次1 AndroidStudioの日本語化2 kotlinでHello World3 Viewからの値の読み書きとイベントの設定4 …