Bluetooth Low Energy

Android は、中心的な役割において Bluetooth Low Energy(BLE)の組み込みプラットフォーム サポートを提供し、アプリがデバイスの検出、サービスのクエリ、情報の送信に使用できる API を提供します。

一般的なユースケースは次のとおりです。

  • 付近のデバイス間で少量のデータを転送する場合。
  • 近接センサーを操作し、ユーザーの現在地に基づいてカスタマイズされたエクスペリエンスを提供する。

従来の Bluetooth とは対照的に、BLE は消費電力を大幅に削減できるように設計されています。これにより、近接センサー、心拍数モニター、フィットネス デバイスなど、電力要件が厳しい BLE デバイスと通信できます。

注意: ユーザーが BLE を使用して自分のデバイスを別のデバイスとペア設定すると、ユーザーのデバイス上のすべてのアプリが、2 つのデバイス間で通信されるデータにアクセスできるようになります。

そのため、アプリで機密データをキャプチャする場合は、そのデータのプライバシーを保護するためアプリレイヤ セキュリティを実装する必要があります。

基本情報

BLE 対応デバイスが相互にデータを送信するには、まず通信チャネルを形成する必要があります。Bluetooth LE API を使用するには、マニフェスト ファイルで複数の権限を宣言する必要があります。アプリに Bluetooth を使用する権限が付与されたら、アプリは BluetoothAdapter にアクセスし、デバイスで Bluetooth を使用できるかどうかを判断する必要があります。Bluetooth が利用可能な場合、デバイスは付近の BLE デバイスをスキャンします。デバイスが検出されると、BLE デバイスで GATT サーバーに接続することで BLE デバイスの機能が検出されます。接続が確立されると、利用可能なサービスと特性に基づいて、接続されたデバイスでデータを転送できます

主な用語と概念

BLE の主な用語と概念は、以下のとおりです。

  • Generic Attribute Profile(GATT)
    GATT プロファイルは、「属性」と呼ばれる短いデータを BLE リンクで送受信するための一般的な仕様です。現在の BLE アプリ プロファイルは、すべて GATT に基づいています。詳しくは、GitHub の Android BluetoothLeGatt サンプルをご覧ください。
  • プロフィール
    Bluetooth SIG は、BLE デバイスの多くのプロファイルを定義しています。プロファイルとは、特定のアプリケーションでデバイスがどのように動作するかを示す仕様です。デバイスは複数のプロファイルを実装できます。たとえば、デバイスに心拍数モニターとバッテリー残量検出機能が搭載されている場合があります。
  • 属性プロトコル(ATT)
    GATT は属性プロトコル(ATT)を基盤としています。これは GATT/ATT とも呼ばれます。ATT は BLE デバイスで動作するように最適化されています。そのために、可能な限り少ないバイトを使用します。各属性は Universally Unique Identifier(UUID)によって一意に識別されます。UUID は、情報を一意に識別するために使用される、標準化された 128 ビット形式の文字列 ID です。ATT によって転送される属性は、特性とサービスとしてフォーマットされます。
  • 特性
    特性は 1 つの値と、その値を記述する 0 ~ n 個の記述子で構成されます。特性は、クラスに似た型と考えることができます。
  • 記述子
    記述子は、特性値を記述する定義済みの属性です。たとえば、記述子は人が読める形式の説明、特性値の許容範囲、特性の値に固有の測定単位などを指定できます。
  • サービス
    サービスとは特性のコレクションです。たとえば、「心拍数測定」などの特性を含む「Heart Rate Monitor」というサービスがあるとします。既存の GATT ベースのプロファイルとサービスのリストは、bluetooth.org で確認できます。

役割と責任

デバイスが BLE デバイスと通信する際は、以下の役割と責任が適用されます。

  • セントラルかペリフェラルか。これは BLE 接続自体に当てはまります。中央ロールのデバイスがアドバタイズをスキャンし、ペリフェラル ロールのデバイスがアドバタイズメントを作成します。

  • GATT サーバーと GATT クライアントこれにより、2 台のデバイスが接続を確立した後の相互通信方法が決まります。この違いを理解するため、Android スマートフォンと BLE デバイスであるアクティビティ トラッカーをお持ちだとします。スマートフォンは中心的な役割をサポートし、アクティビティ トラッカーはペリフェラルの役割をサポートします。BLE 接続を確立するには、それぞれ 1 つずつが必要です。周辺機器のみをサポートする 2 つのものは相互に通信できず、セントラルのみをサポートする 2 つのものは互いに通信できません。

スマートフォンとアクティビティ トラッカーの接続を確立すると、GATT メタデータの相互転送が開始されます。転送するデータの種類に応じて、どちらか一方がサーバーとして機能します。たとえば、アクティビティ トラッカーからスマートフォンにセンサーデータを報告する場合、アクティビティ トラッカーをサーバーとして機能させるとよいかもしれません。アクティビティ トラッカーがスマートフォンからの最新情報を受け取りたい場合は、スマートフォンがサーバーとして機能することが合理的です。

このトピックで使用する例では、GATT クライアントを(Android デバイスで動作している)アプリとして示します。アプリは、心拍数プロファイルをサポートする BLE 心拍数モニターである GATT サーバーからデータを取得します。また、GATT サーバーの役割をアプリを設計することもできます。詳しくは、BluetoothGattServer をご覧ください。