1. ホーム
  2. android

[解決済み] Bluetoothデバイスが接続されているかどうかをプログラムで判断するにはどうすればよいですか?

2023-03-18 18:34:29

質問

ペアリングされたデバイスのリストを取得する方法はわかりましたが、それらが接続されているかどうかを確認するにはどうしたらよいでしょうか。

携帯電話の Bluetooth デバイスのリストに表示され、接続状態が記載されているので、可能なのでしょう。

どのように解決するのですか?

AndroidManifestにBluetooth権限を追加してください。

<uses-permission android:name="android.permission.BLUETOOTH" />

次に、インテント・フィルタを使って ACTION_ACL_CONNECTED , ACTION_ACL_DISCONNECT_REQUESTED そして ACTION_ACL_DISCONNECTED の放送があります。

public void onCreate() {
    ...
    IntentFilter filter = new IntentFilter();
    filter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
    filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED);
    filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
    this.registerReceiver(mReceiver, filter);
}

//The BroadcastReceiver that listens for bluetooth broadcasts
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
           ... //Device found
        }
        else if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
           ... //Device is now connected
        }
        else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
           ... //Done searching
        }
        else if (BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED.equals(action)) {
           ... //Device is about to disconnect
        }
        else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {
           ... //Device has disconnected
        }
    }
};


ちょっとしたメモ。

  • アプリケーション起動時に接続デバイスの一覧を取得する方法はありません。Bluetooth API では クエリ を聞くことはできませんが、その代わりに 変更 .
  • 上記の問題に対する不安定な回避策は、すべての既知の/ペアリングされたデバイスのリストを取得することです... その後、各デバイスに接続してみてください (接続されているかどうかを判断するため)。
  • あるいは、バックグラウンド サービスで Bluetooth API を監視し、デバイスの状態をディスクに書き込んで、アプリケーションが後で使用できるようにすることもできます。