ble デバイスを使用してシンプルな Android アプリを開発しようとしています。インターネットから多くのソースコードを見つけました。ただし、どちらも使用可能な ble デバイスのリストをスキャンすることから始めました。私はデバイスのMACアドレスを持っているので、サービスと特性のUUID。既知のデバイスに接続して、特定の特性を直接読み取るにはどうすればよいですか??
3 に答える
デバイスのMACアドレス、サービスのUUID、特性などの詳細を持つ特定のBluetoothデバイスを接続するには、すでに知っている. これを行うには、次のような呼び出しを行う BluetoothDevice オブジェクトが必要です。
yourBluetoothDevice.connectGatt(getApplicationContext(), false, bleGattCallback);
そのため、この (yourBluetoothDevice) の場合、最初にスキャンを開始して、MAC アドレスを比較して接続する同じデバイス オブジェクトを取得する必要があります。ただし、onLeScan コールバックで同じデバイス オブジェクトを取得した場合は、スキャンを停止して同じデバイスに接続するだけです。
注:接続は UIThread (Handler、runOnUIThread、または mainlooperThread のいずれかを使用) で行う必要があります。そうしないと、一部のデバイスで「コールバックの登録に失敗しました」という問題が発生します。
ここで yourBluetoothDevice は、接続したいデバイス オブジェクト参照です。bleGattCallback は、接続ステータス、検出されたサービス、特性の読み取りと書き込みなどのために登録された新しい BluetoothGattCallback() コールバックです。
createInsecureRfcommSocketToServiceRecordを見てください。このようなもの:
UUID uuid = UUID.fromString("<Your UUID>");
BluetoothSocket socket = yourBLEDevice.createInsecureRfcommSocketToServiceRecord(uuid);
Method m = yourBLEDevice.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
socket = (BluetoothSocket) m.invoke(yourBLEDevice, 1);