App InventorでAndroidのセンサを操作するには:App Inventorでアプリ開発はどこまでできるのか(3)(1/3 ページ)
プログラミング未経験でも手軽にAndroidアプリが作れるApp Inventor。本連載では、App Inventorでアプリを作り、使用しているコンポーネントに関して実際にJavaのAPIと比較して、できることを検証していきます。
Androidの「センサアプリ」とは
前回の記事「App Inventor for Androidで使う基本的な部品を知る」では、デザイナの画面部品とブロックエディタのイベント部品の基本を理解して、「App Inventor for Android」で可能な、さまざまなことを理解するための基礎知識を身に付けました。今回は、その知識を生かしてセンサを使ったAndroidアプリをApp Inventorで作ってみましょう。
センサはスマートフォンの利便性を支える重要な機能で、GPSや傾きセンサ、加速度センサなどがあります。センサを活用するさまざまなアプリを導入することによって、スマートフォンは新しい価値を得続けることができます。
Androidのセンサアプリの例
センサアプリとはケータイに搭載されている各種センサを活用したアプリを指します。
分かりやすいのは、Androidケータイではおなじみの、グーグルから提供されている「モバイルGoogleマップ」です。これはGPSセンサを使い現在地を取得し、付近の地図を表示したり、目的地までの経路を検索したり、付近のお店を検索したり、と私たちの生活を便利にする機能を提供してくれます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
Androidのソフトウェアでサポートしている12のセンサ
2011年5月の原稿執筆時現在、Androidのソフトウェアでサポートしているセンサは以下の通りです。
ロケーション(GPS) 加速度 重力 ジャイロ 明るさ 線形加速度 地磁気 方向 圧力 近傍 回転方向 温度
Androidが、どのようなセンサをサポートしているかは、ロケーションセンサ以外APIドキュメントで「android.hardware.Sensor」クラスのドキュメントを参照し、Sensorクラスにある定数を見れば分かります。他にも、Androidで使えるセンサについては、以下の記事を参照してください。
Androidで動く携帯Javaアプリ作成入門(13) Androidで使えるさまざまなセンサを紹介し、加速度や磁気、方位、温度などの値を取得して使うアプリの作り方を解説します
「Smart & Social」フォーラム 2010/1/15
なお、各種センサはアプリを動作させるAndroidケータイに使用するセンサの機器が搭載されていることが使用するための条件です。また、APIの変更に伴ってサポートされるセンサの種類が変更されることがあります。
App Inventorで扱えるセンサの概要
App InventorではJavaでAndroidアプリを作る場合と同じようにAndroidケータイに搭載されたセンサ機能を生かしたアプリを作れます。App Inventorで使用できるセンサはデザイナ画面を見れば分かります。
今までの連載で作ったApp Inventorのプロジェクトを開いて、[Palette]の[Sensors]を開いてください。
図1のように、3つのセンサ部品が見つかります。App Inventorで扱えるセンサは、この3つです。
- 加速度センサ
- ロケーションセンサ
- 方向センサ
ずいぶん数が少なくなっていますが、センサといえばパッと思い付くものがサポートされているような状況です。
ここからは、App InventorとJavaのSDKでのアプリ作りにどのような差があるか理解するため、App Inventorで使用できる3つのセンサ部品を対応するJavaのSDKと比較して、その違いを見ていきます。
加速度センサでのApp InventorとJavaのSDKの違い
加速度センサはケータイ自体の動きを感知するセンサです。
イベント
加速度センサが感知できるイベントには、どのような違いがあるのでしょうか。比較するため以下の表にイベントを一覧にしています。
イベント | App Inventor上のイベント名 | Java上のイベント名 |
---|---|---|
センサの状態変化時 | AccelerationChanged | onSensorChanged |
ケ−タイを振ったとき | Shaking | − |
センサの精度変化時 | − | onAccuracyChanged |
なお、Javaの加速度センサに関するイベントは「android.hardware.SensorEventListener」インターフェイスに定義されています。
センサで共通のイベント
このインターフェイスのイベントは、加速度センサだけではなく、ロケーションセンサ以外のセンサ類でも共通して使用するインターフェイスです。少し詳しく言うと、以下の表2にあるパッケージでロケーションセンサ関係のクラスやインターフェイスとそれ以外のものとが分かれています。
パッケ−ジ | 今回登場するクラスとインターフェイス |
---|---|
android.hardware | SensorEventLisener、Sensor、SensorEvent、SensorManager |
android.location | LocationListener、Location、LocationManager |
App InventorとJavaのどちらも共通しているのは加速度センサの状態が変化した場合のイベントを持っているということです。App InventorとJavaのSDKのどちらの場合でも図2に示されるように、X軸、Y軸、Z軸の加速度を扱えます。
App Inventor固有のイベント「Shaking」
App Inventor固有のイベントには、ケータイがシェイクされた場合を取り扱うこと「Shaking」があります。JavaのSDKでもシェイクされた状態を取り扱うことはできますが、自分で加速度センサの値を駆使して「シェイクされた状態」というのが、どういうものかを自分で定義する必要があります。App Inventorでは、その定義はすでに作られたものを利用できます。
JavaのSDK固有のイベント「onAccuracyChanged」
App Inventorにはできず、JavaのSDK固有となっているのは「onAccuracyChanged」という精度が変わったときのイベントです。このイベントは、「加速度センサの感度が悪くなったらメッセージを出して、精度が良くなるような操作を促す」というように使います。
次ページでは、ロケーションセンサと方向センサにおけるApp InventorとJavaのSDKについて説明し、App Inventorでロケーションセンサを使ったアプリの作り方を解説します。
Copyright © ITmedia, Inc. All Rights Reserved.