Androidには端末に搭載された各種のセンサー機能を利用するためのAPIが提供されています。
このAPIを利用することで、安易にセンサーから値を取得することができる仕組みとなっているのです。
Androidでサポートしているセンサー類は3種に分類することができます。
● モーションセンサー
加速度センサー、重力センサー、ジャイロスコープなどがモーションセンサーに該当します。
● 環境センサー
気圧センサー、照度センサー、温度センサーなどが環境センサーに該当します。
● 位置センサー
傾きセンサー、地磁気センサーなどが位置センサーに該当します。
これらのセンサーを利用するアプリケーションを作成するためには、Androidのセンサー・フレームワークを使用する必要があります。
センサー・フレームワークには便利なクラス・インターフェース群が定義されています。
※注意※
エミュレーターはセンサー機能に対応していないため、このCHAPTERのサンプルプログラムは実機で実行してください。
また、機種ごとに実装が(APIから取得できる値が)異なり、かつ搭載されているセンサーも機種ごとに異なるため、注意する必要があります。
まず、センサー・フレームワークの中に定義されているクラス・インタフェースを紹介します。
これらのクラス・インタフェースはandroid.hardwareパッケージに属しています。
クラス/インターフェース名 | 概要 |
---|---|
Sensor | 各種センサー機器に共通する属性(名前、センサー種類、開発ベンダー、バージョン番号等)を管理するセンサー自身を表したクラス。 |
SensorManager | センサーにアクセスするためのクラス。このクラスのオブジェクトを用いてイベントリスナーの登録/削除、センサー情報の取得等を行う。 |
SensorEvent | センサーで発生した情報をまとめたクラス。 |
SensorEventListener | センサー関連のイベントを取得するためのイベントリスナー。SensorManagerクラスで登録/削除を行う。 |
Senserクラスは、センサー自身を表したクラスです。例えば3つのセンサーを搭載しているAndroid端末では、このクラスから作成したオブジェクトが3つ存在するイメージです。
SenserManagerクラスは、Senserオブジェクトを取得したり、そのオブジェクトに対してイベントリスナーを登録する際に使用します。
SenserEventクラスは、センサーで発生した情報をまとめたクラスです。センサーの種類によって取得できる値が違う(あるセンサーでは3次元ベクトルの値を、またあるセンサーでは1つの値(温度など)を取得する)ため、それらの違いを吸収したり、発生した時間や値の精度を保持するためのクラスです。
SenserEventListenerインタフェースは、センサー関連のイベントをハンドリングし、センサーが測定した値を取得するためのコールバックメソッドを定義しています。SenserManagerクラスをメソッドを使用し、リスナーとしての登録することができます。。
では実際にセンサーから値を取得するための手順に沿って、センサー・フレームワークの使用方法を紹介します。
1. getSystemService()メソッドを使用し、 SensorManagerオブジェクトを取得する
2. SensorManagerオブジェクトから使用したいSensorオブジェクトを取得する
3. SensorEventListenerインターフェースを実装したクラスを作成・インスタンス化し、イベントリスナーとして登録する
4. センサーでイベントが発生すると、イベントリスナーとして登録したSensorEventListenerのコールバックメソッドが実行され、センサーで取得した値がSenserEventオブジェクトとして引数として渡される
5. 不要となったリスナーは解除する
private SensorManager sensorManager; // ...省略... sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
getSystemService()メソッドはContextクラスで定義されているメソッドです。ActivityクラスやServiceクラスでは上記のように使用することができます。
引数にはStringを渡しますが、一般にはContextクラスに定義されている定数を使います。SENSOR_SERVICEを引数に渡すことでSensorManagerオブジェクトを取得することができます。
戻り値はObjectクラスのため、キャストする必要があります。
Androidアプリ開発の必須知識!JAVAプログラミングを学べる連載リンク
Recent News
-
2023.04.28セキュリティソリューション事業部からのお…
-
2023.04.28セキュリティエンジニアが気になったニュー…
-
2023.04.21セキュリティエンジニアが気になったニュー…
-
2023.04.12セキュリティエンジニアが気になったニュー…
-
2023.04.07セキュリティエンジニアが気になったニュー…
Recent Tips
-
2021.08.31SQLの概要
-
2020.06.25【Java Silver】モジュールシス…
-
2020.06.20【Java】Integer.parseI…
-
2020.06.15【Java Silver】モジュールシス…
-
2020.06.04世界を支える数学~公開鍵暗号方式~
Tag Search
- 基本(503)
- 練習問題(456)
- プログラミング(449)
- サンプル(332)
- JAVA(301)
- 初心者(288)
- PHP(237)
- Linux(214)
- Android(194)
- アプリ(162)
- 環境構築(159)
- JAVA練習問題(143)
- サーバ(135)
- Unity(134)
- CCNA(132)
- インストール(111)
- iPhone(102)
- C言語(100)
- Xcode(93)
- TIPS(91)
- VBA(83)
- PHP練習問題(80)
- Excel(79)
- Swift(77)
- コラム(75)
- コマンド(72)
- ICND1(72)
- SQL練習問題(72)
- 無料(67)
- ICND2(63)
- セキュリティ(58)
- Apache(57)
- ネットワーク(56)
- JAVA8(51)
- JavaScript(50)
- CCNP(50)
- java8練習問題(48)
- ツール(47)
- 難易度:★なし(47)