Android プラットフォームは Bluetooth ネットワーク スタックをサポートしています。これにより、デバイスは他の Bluetooth デバイスとワイヤレスでデータを交換できます。アプリのフレームワークでは、Bluetooth API を介して Bluetooth 機能にアクセスできます。これらの API を使用すると、アプリは他の Bluetooth デバイスに接続でき、ポイントツーポイントやマルチポイントのワイヤレス機能が有効になります。
Bluetooth API を使用すると、アプリは次のことができます。
- 他の Bluetooth デバイスをスキャンします。
- ローカルの Bluetooth アダプターに対して、ペア設定された Bluetooth デバイスのクエリを行います。
- RFCOMM チャネルを確立する。
- サービス ディスカバリを使用して他のデバイスに接続する。
- 他のデバイスとの間でデータを転送できます。
- 複数の接続を管理する。
このトピックでは、従来の Bluetooth を中心に説明します。デバイス間のストリーミングや通信など、バッテリー消費量の多い操作には、クラシック Bluetooth が適しています。低消費電力の要件がある Bluetooth デバイスでは、Bluetooth Low Energy 接続の使用を検討してください。
このドキュメントでは、さまざまな Bluetooth プロファイルについて説明し、Bluetooth API を使用して Bluetooth で通信するために必要な次の 4 つの主要タスクを実行する方法について説明します。
- Bluetooth をセットアップしています。
- ペア設定されているデバイス、またはお住まいの地域で利用可能なデバイスを探す。
- デバイスを接続しています。
- デバイス間でのデータ転送
Bluetooth API の使用方法を示すデモについては、Bluetooth Chat サンプルアプリをご覧ください。
基本情報
Bluetooth 対応デバイスが相互にデータを送信するには、まずペア設定プロセスを使用して通信チャネルを形成する必要があります。1 つのデバイス(検出可能なデバイス)は、受信接続リクエストに対して自身を使用可能にします。別のデバイスが、サービス ディスカバリ プロセスを使用して検出可能なデバイスを検出します。検出可能なデバイスがペア設定リクエストを受け入れると、2 つのデバイスはセキュリティ キーを交換するボンディング プロセスを完了します。デバイスは、後で使用するためにこれらのキーをキャッシュに保存します。ペア設定とボンディングのプロセスが完了すると、2 つのデバイスは情報を交換します。セッションが完了すると、ペア設定リクエストを開始したデバイスが、検出可能なデバイスにリンクしていたチャンネルを解放します。ただし、2 つのデバイスはボンディングされたままになるため、今後のセッション中に自動的に再接続できます。ただし、これらのデバイスが互いに接続範囲内にあり、どちらのデバイスもボンディングを解除していない場合に限ります。
Bluetooth API を使用するには、マニフェスト ファイルで複数の権限を宣言する必要があります。アプリに Bluetooth を使用する権限が付与されたら、アプリは BluetoothAdapter
にアクセスして、デバイスで Bluetooth が使用可能かどうかを判断する必要があります。Bluetooth を利用できる場合、接続を確立するには次の 3 つの手順を行います。
一部のデバイスでは、提供するデータを宣言する特定の Bluetooth プロファイルが使用されます。
キークラスとインターフェース
すべての Bluetooth API は、android.bluetooth
パッケージに含まれています。Bluetooth 接続の作成に必要なクラスとインターフェースは次のとおりです。
BluetoothAdapter
- ローカル Bluetooth アダプター(Bluetooth 無線通信)を表します。
BluetoothAdapter
は、すべての Bluetooth インタラクションのエントリ ポイントです。これを使用して、他の Bluetooth デバイスの検出、ボンディング(ペア設定)デバイスのリストをクエリ、既知の MAC アドレスを使用してBluetoothDevice
のインスタンス化、他のデバイスからの通信をリッスンするBluetoothServerSocket
の作成を行うことができます。 BluetoothDevice
- リモートの Bluetooth デバイスを表します。これを使用して、
BluetoothSocket
を介したリモート デバイスとの接続や、デバイスに関する情報(名前、アドレス、クラス、ボンディング状態など)をクエリします。 BluetoothSocket
- Bluetooth ソケットのインターフェースを表します(TCP
Socket
に類似)。この接続ポイントにより、アプリはInputStream
とOutputStream
を使用して別の Bluetooth デバイスとデータを交換できます。 BluetoothServerSocket
- 受信リクエストをリッスンするオープンなサーバー ソケットを表します(TCP
ServerSocket
と同様)。2 つのデバイスを接続するには、1 つのデバイスがこのクラスでサーバー ソケットを開く必要があります。リモート Bluetooth デバイスがこのデバイスに接続リクエストを行うと、デバイスは接続を受け入れ、接続されたBluetoothSocket
を返します。 BluetoothClass
- Bluetooth デバイスの一般的な特性と機能について説明します。 デバイスのクラスとサービスを定義する読み取り専用のプロパティ セットです。この情報はデバイスの種類に関する有用なヒントを提供しますが、このクラスの属性は、必ずしもデバイスがサポートするすべての Bluetooth プロファイルとサービスを記述するわけではありません。
BluetoothProfile
- Bluetooth プロファイルを表すインターフェース。Bluetooth プロファイルは、デバイス間で Bluetooth ベースの通信を行うためのワイヤレス インターフェース仕様です。その一例が、ハンズフリー プロファイルです。プロファイルについて詳しくは、Bluetooth プロファイルをご覧ください。
BluetoothHeadset
- スマートフォンで使用する Bluetooth ヘッドセットをサポートします。これには、Bluetooth ヘッドセット プロファイルと Hands-Free(v1.5)プロファイルの両方が含まれます。
BluetoothA2dp
- Advanced Audio Distribution Profile(A2DP)を使用して、Bluetooth 接続でデバイス間で高品質の音声をストリーミングする方法を定義します。
BluetoothHealth
- Bluetooth サービスを制御する Health Device Profile プロキシを表します。
BluetoothHealthCallback
BluetoothHealth
コールバックの実装に使用する抽象クラス。このクラスを拡張し、アプリの登録状態と Bluetooth チャンネル状態の変化に関する最新情報を受け取るコールバック メソッドを実装する必要があります。BluetoothHealthAppConfiguration
- Bluetooth Health のサードパーティ アプリがリモート Bluetooth Health デバイスと通信するために登録するアプリ構成を表します。
BluetoothProfile.ServiceListener
BluetoothProfile
のプロセス間通信(IPC)クライアントに対して、特定のプロファイルを実行する内部サービスとの接続や接続の切断を通知するインターフェース。