Bluetoothの設定

アプリが Bluetooth または Bluetooth Low Energy で通信する前に、デバイスで Bluetooth がサポートされているかを確認する必要があります。サポートされている場合は、有効になっていることを確認します。このチェックは、<uses-feature.../> マニフェスト ファイルのエントリの android:required 属性が false に設定されている場合にのみ必要です。

Bluetooth がサポートされていない場合は、Bluetooth 機能を適切に無効にする必要があります。Bluetooth はサポートされているものの、無効になっている場合は、アプリを離れることなく Bluetooth を有効にするようユーザーにリクエストできます。

まず、以下の API を使用するために、マニフェスト ファイルに Bluetooth の権限を追加します。

権限を設定したら、BluetoothAdapter を使用して、2 つのステップで Bluetooth をセットアップします。

  1. BluetoothAdapter を取得します。

    BluetoothAdapter は、すべての Bluetooth アクティビティに必要です。BluetoothAdapter は、デバイス独自の Bluetooth アダプター(Bluetooth 無線通信)を表します。BluetoothAdapter を取得するには、まず Context が必要です。このコンテキストを使用して、BluetoothManager システム サービスのインスタンスを取得します。BluetoothManager#getAdapter を呼び出すと、BluetoothAdapter オブジェクトが作成されます。getAdapter() が null を返した場合、デバイスは Bluetooth をサポートしていません。

    次に例を示します。

    Kotlin

    val bluetoothManager: BluetoothManager = getSystemService(BluetoothManager::class.java)
    val bluetoothAdapter: BluetoothAdapter? = bluetoothManager.getAdapter()
    if (bluetoothAdapter == null) {
      // Device doesn't support Bluetooth
    }
    

    Java

    BluetoothManager bluetoothManager = getSystemService(BluetoothManager.class);
    BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
    if (bluetoothAdapter == null) {
      // Device doesn't support Bluetooth
    }
    
  2. Bluetooth を有効にします。

    次に、Bluetooth が有効になっていることを確認します。isEnabled() を呼び出して、Bluetooth が現在有効になっているかどうかを確認します。このメソッドが false を返した場合、Bluetooth は無効になっています。Bluetooth の有効化をリクエストするには、startActivityForResult() を呼び出し、ACTION_REQUEST_ENABLE インテントのアクションを渡します。この呼び出しは、アプリを停止せずに、システム設定から Bluetooth を有効にするリクエストを発行します。

    次に例を示します。

    Kotlin

    if (bluetoothAdapter?.isEnabled == false) {
      val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
      startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
    }
    

    Java

    if (!bluetoothAdapter.isEnabled()) {
      Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
      startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
    }
    

図 1 に示すように、Bluetooth を有効にするためのユーザー権限をリクエストするダイアログが表示されます。ユーザーが権限を付与すると、システムは Bluetooth の有効化を開始し、プロセスが完了(または失敗)すると、フォーカスがアプリに戻ります。


図 1. Bluetooth を有効にするダイアログ。

startActivityForResult() に渡される REQUEST_ENABLE_BT 定数は、0 以上のローカルで定義された整数です。この定数は、onActivityResult() の実装で requestCode パラメータとしてシステムによって返されます。

Bluetooth の有効化に成功すると、アクティビティは onActivityResult() コールバックで結果コード RESULT_OK を受け取ります。エラーで Bluetooth が有効しなかった場合(またはユーザーが「拒否」と応答した場合)、結果コードは RESULT_CANCELED です。

必要に応じて、アプリは ACTION_STATE_CHANGED ブロードキャスト インテントをリッスンすることもできます。このインテントは、Bluetooth の状態が変化するたびにシステムがブロードキャストします。このブロードキャストには、追加フィールドの EXTRA_STATEEXTRA_PREVIOUS_STATE が含まれており、それぞれ新しい Bluetooth 状態と古い Bluetooth 状態が含まれています。これらの追加フィールドで指定可能な値は、STATE_TURNING_ONSTATE_ONSTATE_TURNING_OFFSTATE_OFF です。このブロードキャストのリッスンは、Bluetooth の状態に加えられたランタイムの変更をアプリで検出する必要がある場合に役立ちます。

ヒント: 検出の許可を有効にすると、Bluetooth が自動的に有効になります。Bluetooth アクティビティを実行する前にデバイスの検出可能性を一貫して有効にする場合は、前の手順のステップ 2 をスキップできます。

デバイスで Bluetooth を有効にすると、Bluetooth クラシックと Bluetooth Low Energy の両方を使用できます。

従来の Bluetooth の場合は、Bluetooth デバイスを検索し、Bluetooth デバイスに接続できます。

Bluetooth Low Energy では、BLE デバイスを検出し、GATT サーバーに接続して、BLE データを転送できます。