我尝试使用ble设备开发一个简单的Android应用程序。 我从Intenet找到了很多源代码。但是,它们都是从扫描可用的ble设备列表开始的。 因为我有设备的MAC地址,UUID的服务和特性。 如何连接到已知设备并直接读取一个特定的特性?
答案 0 :(得分:2)
连接特定的蓝牙设备,其中包含设备的MAC地址,服务的UUID和您已经知道的特性等详细信息。要做到这一点,你需要一个BluetoothDevice对象来进行这样的调用:
yourBluetoothDevice.connectGatt(getApplicationContext(), false, bleGattCallback);
所以对于这个(yourBluetoothDevice),你必须首先开始扫描,通过比较它的MAC地址来获得相同的设备对象。但是,你在onLeScan回调中获得相同的设备对象只是停止扫描并与同一设备建立连接。
注意:建立连接应该在UIThread上(使用Handler,runOnUIThread或mainlooperThread)否则会在某些设备中出现'无法注册回调的问题&#39 强>
此处yourBluetoothDevice是您想要建立连接的设备对象引用。 bleGattCallback是注册的新BluetoothGattCallback()回调,用于连接状态,发现的服务,特性读写等。
答案 1 :(得分:0)
看看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);
答案 2 :(得分:0)
如果您已经知道Mac地址,则可以尝试以下操作:
final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(mMacAddress);
final BluetoothGatt mGatt = device.connectGatt(getApplication(), false, gattCallback);