Androidアプリ開発に欠かせない、外部機器とセンサー:Android技術者認定試験「ACE」ドリル(9)(2/2 ページ)
今回は「外部機器」と「センサー」についての演習問題に取り組む。これらと連携することで、GPSと連動した地図表示、加速度センサーを用いたゲームなどを容易に実現できる。
解答
演習1:答え(4)
演習1は、位置情報を扱う際に必要なクラスを問う問題です。GPSを使用する際には、「android.location.LocationManager」クラスが必要になります。よって正解は(4)となります。
また、LocationManagerクラスのインスタンスは、「Context#getSystemService」メソッドを用いて取得できます。
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
上記コードで取得したLocationManagerクラスのインスタンスを用い、「LocationManager#requestLocationUpdates」メソッドで位置情報の更新開始を、「LocationManager#removeUpdates」メソッドで位置情報の取得終了を行うことが可能です。なお、位置情報の取得が不要になった際は、必ずLocationManager#removeUpdatesメソッドを呼び出すようにしましょう。
GPSの他に、ネットワークを用いて位置情報を取得することも可能ですが、その際もLocationManagerクラスを用いることになります。
なお、選択肢の(1)は実際に存在しますが(詳細は後述)、(2)(3)は存在しません。
演習2:答え(1)
演習2は、「LocationListener」のメソッドを問う問題です。
まずは、LocationListenerについて簡単に説明しましょう。LocationListenerは位置情報が変化したときに、その情報を取得したいクラスに実装するリスナーとなります。実体としては“interface”となっており、これを実装したクラスはLocationListenerが保持するメソッドを実装する必要があります(これはJavaのルールですね)。
その“LocationListenerが保持するメソッド”ですが、下記の4つがあります(表1)。
メソッド名 | 機能概要 |
---|---|
onLocationChanged | 位置情報が変更されるたびに呼び出される |
onStatusChanged | LocationProvider(※1)が変更されるたびに呼び出される |
onProviderDisabled | LocationProviderが無効化されたときに呼び出される |
onProviderEnabled | LocationProviderが有効化されたときに呼び出される |
表1 LocationListenerの持つメソッド ※1 LocationProviderとは、位置情報を実際に提供するクラス |
これら4つのメソッドを実装することにより、位置情報の変化を取得し、アプリケーションに反映させることができます。
よって正解はA、B、D、Fの組み合わせ、すなわち選択肢の(1)となります。
演習3:(2)
センサーを利用する際に用いるクラスは、「android.hardware.SensorManager」となります。よって正解は(2)です。
また、SensorManagerクラスのインスタンスは、「Context#getSystemService」メソッドを用いて取得できます
SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
演習4:(3)
演習4は、SensorManagerクラスがサポートしているセンサーに関する問題です。サポートしているセンサーの一覧は以下の通りです(表2)。
Sensorクラスの定数 | センサー |
---|---|
TYPE_ACCELEROMETER | 加速度センサー |
TYPE_AMBIENT_TEMPERATURE | 周辺温度センサー(APIレベル15以降) |
TYPE_GRAVITY | 重力センサー(APIレベル9以降) |
TYPE_GYROSCOPE | ジャイロセンサー |
TYPE_LIGHT | 照度センサー |
TYPE_LINEAR_ACCELERATION | 直線加速度センサー(APIレベル9以降) |
TYPE_MAGNETIC_FIELD | 地磁気センサー |
TYPE_ORIENTATION | 傾きセンサー(現在は非推奨) |
TYPE_PRESSURE | 圧力センサー |
TYPE_PROXIMITY | 近接センサー |
TYPE_RELATIVE_HUMIDITY | 相対湿度センサー(APIレベル15以降) |
TYPE_ROTATION_VECTOR | 回転ベクトルセンサー(APIレベル9以降) |
TYPE_TEMPERATURE | 温度センサー(現在は非推奨) |
表2 SensorManagerクラスがサポートしているセンサーの一覧 |
表2より、サポートしていない選択肢は(3)の赤外線センサーとなります。
また、表2はサポートする全てのセンサーを記していますが、一部は途中のAPIレベルから追加されています。「ACE(OESF Authorized Certification Engineer for Android)」試験対策の観点からいうと、少なくとも途中で追加されたもの以外は全て覚えておくのがよいでしょう。
さて、これで外部機器とセンサーは終了です。冒頭でも書きましたが、この分野は比較的取り組みやすい内容といえます。「記憶問題が多いな」と思うかも知れませんが、逆にいえば、知っていればすぐに得点できる“おいしい”分野です。しっかりと学習して、自分のものにしておきましょう!
次回は「マルチメディア」と「テスト」について学んでいきます。お楽しみに! (次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.