現代のスマートフォンは単なるコンピューティングデバイスではなく、強力なセンサーの集合体です。カメラ、加速度計、ジャイロスコープ、NFC、顔認識スキャナー — これらすべてはプラットフォームAPIを通じて開発者が利用できます。ハードウェア機能を使用すると、フィットネストラッカーから拡張現実ゲームまで、物理的な世界と対話するアプリケーションを作成できます。この記事では、iOSおよびAndroidの主要なセンサーとAPIをすべて説明します。詳細については、Android Sensorsの公式ドキュメントをご覧ください。
重要ポイント
スマートフォンのハードウェア機能には、環境やデバイスの位置に関するデータを収集する数十のセンサーが含まれています。このデータはSensors API(Android)およびCore Motion(iOS)を介して利用できます。センサーは3つのカテゴリに分類されます:モーションセンサー(加速度計、ジャイロスコープ)、位置センサー(磁力計)、環境センサー(気圧計、光、温度)。
加速度計は、3軸(x、y、z)に沿ったデバイスの加速度をm/s²で測定します。画面の向きの検出(自動回転)、歩数計測(歩行者ナビゲーション)、ジェスチャ認識(シェイクで元に戻す)、傾き制御ゲームに使用されます。Android Sensor.TYPE_ACCELEROMETERおよびCore Motion CMMotionManager(iOS)は、最大200 Hzの生データを提供します。
ジャイロスコープは、3軸(rad/s)に沿ったデバイスの回転角速度を測定します。加速度計とは異なり、ジャイロスコープは重力の影響を受けないため、回転の追跡に最適です。用途:ビデオ手ブレ補正、VR/ARアプリケーション、屋内ナビゲーション、ゲームコントローラー。Sensor.TYPE_GYROSCOPE(Android)およびCMMotionManager(iOS)が主要なAPIです。
磁力計は、3軸(µT)で地球の磁場を測定し、電子コンパスとして機能します。ナビゲーションアプリケーションで北の方角を特定するために使用されます。磁力計は金属物体やスピーカーからの干渉に敏感で、較正が必要です(特徴的な8の字動作)。Sensor.TYPE_MAGNETIC_FIELD — Android API。
気圧計は大気圧(hPa)を測定し、海抜高度を最大1メートルの精度で測定するために使用されます。近接センサーは、通話中に電話を耳に当てると画面をオフにします。環境光センサーは画面の明るさを調整します。これらのセンサーはすべて、統合SensorManager(Android)またはCMMotionManager(iOS)を介してほとんどのモーションセンサーにアクセスできます。
カメラは最も需要の高いハードウェアコンポーネントの1つです。Androidでは、CameraX(最新のJetpack API)またはCamera2(低レベルAPI)を介してアクセスします。CameraXはライフサイクルを自動的に処理し、Preview、ImageCapture、ImageAnalysis(MLフレーム分析)、VideoCaptureをサポートします。iOSでは、カメラはAVFoundationを介して利用できます:AVCaptureSessionがキャプチャを管理し、AVCaptureDeviceがパラメータ(フォーカス、ISO、ホワイトバランス)を設定します。
マイクは音声録音、音声制御、音声認識に使用されます。AndroidではMediaRecorderまたはAudioRecord、iOSではAVAudioRecorderを使用します。カメラとマイクへのアクセスにはユーザーの許可が必要です:Manifest.permission.CAMERAおよびRECORD_AUDIO(Android)、NSCameraUsageDescriptionおよびNSMicrophoneUsageDescription(iOS) — Info.plistで使用理由を説明する文字列。
IT Sectrでは、QRコードスキャナーからARフィルター付きアプリケーションまで、カスタムカメラを使用した20以上のプロジェクトを実装しました。重要な結論:AndroidではCameraXはCamera2と比較して数週間の開発を節約し、iOSではAVFoundationが撮影パラメータを完全に制御できます。CameraXを使用した基本的な画像キャプチャの例:
class CameraFragment : Fragment() {
private lateinit var imageCapture: ImageCapture
fun startCamera() {
val processCameraProvider =
ProcessCameraProvider.getInstance(requireContext())
processCameraProvider.addListener({
val cameraProvider = processCameraProvider.get()
val preview = Preview.Builder()
.build()
.also {
it.setSurfaceProvider(viewFinder.surfaceProvider)
}
imageCapture = ImageCapture.Builder()
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
.build()
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
cameraProvider.bindToLifecycle(
this, cameraSelector, preview, imageCapture
)
}, ContextCompat.getMainExecutor(requireContext()))
}
}
生体認証ハードウェア機能により、ユーザーは指紋または顔を使用してアプリケーションにログインできます。iOSはFace ID(TrueDepthカメラ、30,000個の不可視ドット)およびTouch ID(静電容量式指紋スキャナー)を使用します。AndroidはBiometricPromptを使用し、指紋スキャナー(静電容量式または超音波式)とFace Unlock(カメラ+ML)を組み合わせます。Face IDはTouch IDよりも安全です:一致確率は1:1,000,000対1:50,000。
NFC(近距離無線通信)は、最大10cmの範囲を持つワイヤレス通信技術です。非接触支払い(Google Pay、Apple Pay)、NFCタグの読み取り(スマートポスター、名刺)、認証(書類、チケット)、データ転送(Android Beam — 非推奨)に使用されます。Core NFC(iOS)およびNfcAdapter(Android)が主要なAPIです。iOSでは、NFCは読み取り専用で利用できます(Apple Payを除く)。
Bluetooth/BLE(Bluetooth Low Energy) — 外部デバイス接続用:ヘッドホン、フィットネスバンド、医療用センサー、スマートロック。Core Bluetooth(iOS)およびandroid.bluetooth(Android) — スキャン、接続、データ交換のためのAPI。BLEはエネルギー効率が高く、デバイスはバッテリーで何年も動作できます。iOSでバックグラウンドBLE動作を行うには、Background Modes → Uses Bluetooth LE accessoriesを有効にする必要があります。
健康ハードウェア機能:HealthKit(iOS) — 健康データ集約のためのAppleのフレームワーク。ユーザーは特定のデータタイプ(歩数、心拍数、睡眠、カロリー、体重、血圧)の読み取りと書き込みを許可します。すべてのデータは保護されたリポジトリに保存され、iCloudを介して同期されます。HealthKitは、HKQuantitySampleの書き込みとHKSampleQueryまたはHKStatisticsQueryを介した読み取りのための統一インターフェースを提供します。
Google Fit — Android上のフィットネスデータのためのGoogleのプラットフォーム。APIは2つのセットに分かれています:Sensors API(デバイスセンサーからの実際のデータ — 歩数、カロリー)およびHistory API(履歴データの読み取り/書き込み)。Google Fitは、他のフィットネスアプリ(Strava、Runkeeper)からのデータも認証を介して集約します。iOSでは、Google FitはREST APIを介して利用できます。
Core Motion(iOS) — 専用チップなしでモーションセンサーを扱うためのフレームワーク:加速度計、ジャイロスコープ、歩数計(CMPedometer)、高度計(CMAltimeter)。CMPedometerは歩数、移動距離、ペース、上った階数をカウントします。Androidでは、同様の機能はSensor.TYPE_STEP_COUNTERおよびStep Detectorによって提供されます。すべてのフィットネスデータには明示的なユーザーの同意が必要です。
拡張現実(AR)とオンデバイス機械学習は、スマートフォンのハードウェア機能の頂点を表します。ARKit(Apple、iOS 11+)は、カメラ、ジャイロスコープ、加速度計、LiDAR(Proモデル)を使用して周囲の空間を追跡します。ARCore(Google)は、平面追跡、画像認識、照明推定を備えたAndroid向けの同等品です。両方のフレームワークはVisual Inertial Odometry(VIO) — カメラと慣性センサーの組み合わせ — を使用します。
ML Kit(Google) — AndroidおよびiOS向けの機械学習SDK。テキスト認識(OCR)、バーコードスキャン、顔認識、姿勢検出、物体追跡、画像テキスト認識、自然言語処理などの既製のAPIが含まれています。ML Kitは完全にデバイス上で動作します — データはサーバーに送信されないため、プライバシーとオフライン機能が保証されます。
Core ML(Apple) — iOSアプリケーションにMLモデルを統合するためのフレームワーク。モデル(mlmodel)は、Core ML Toolsを介してTensorFlow、PyTorch、またはKerasから変換されます。Vision — コンピュータビジョンのためのフレームワーク:顔検出、テキスト、バーコード、水平方向の整列。VisionとCore MLの組み合わせにより、リアルタイムMLパイプラインを構築できます:フレームキャプチャ→Vision分析→Core ML予測→UI更新 — すべてデバイス上で50 ms未満のレイテンシで実行されます。
よくある質問
現代のスマートフォンには、加速度計、ジャイロスコープ、磁力計(コンパス)、気圧計、近接センサー、環境光センサー、指紋スキャナー、カメラ、マイク、NFC、Bluetooth、Wi-Fi、GPSが搭載されています。フラッグシップモデルにはLiDAR、心拍数モニター、温度センサーも搭載されています。
Face IDはTrueDepthカメラ(30,000ドット投影)を使用した顔の生体認証です。Touch IDは静電容量式スキャナーを使用した指紋認証です。Face IDの方が安全です(1,000,000分の1対50,000分の1)接触不要で動作します。
最新の方法はCameraX(Jetpackライブラリ)です。CameraXはカメラ操作を簡素化し、ライフサイクルを自動管理し、Preview、ImageCapture、ImageAnalysis、VideoCaptureをサポートします。レガシープロジェクトでは、Camera2 APIが使用されます。
NFCを使用すると、NFCタグの読み取り/書き込み(スマートポスター、名刺)、非接触支払い(Google Pay、Apple Pay)、デバイス間のデータ転送、書類の認証、ドアの開錠、交通系カードの使用ができます。iOSでは、NFCは読み取り専用で利用できます(Apple Payを除く)。
ARKitはiOS向けのAppleの拡張現実フレームワークです。ARCoreはAndroid向けのGoogleの同等品です。どちらも平面追跡、画像認識、照明推定をサポートしています。ARKitはLiDARを使用します(iPad Pro/iPhone Pro)より正確な位置特定を実現します。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。