Android 应用程序:使用 UUID 连接到 GATT 服务器

Android App: Connecting to GATT server using UUIDs

我正在尝试从我的 android 应用连接到 Bleno Periphecal GATT 服务器。

GATT 服务器具有具有唯一 UUID 的自定义服务和特征。

如何确定连接到此服务器并发送一些文本?

最低SDK为21,目标SDK为24,所以旧的BluetoothLE Scanning方法已弃用,现在我需要使用BluetoothLEScanner。

要连接 Ble,只需使用此方法传递 mac 您的 BT 设备的地址。

 private boolean connectGatt(final String address) {
    if (mBluetoothAdapter == null || address == null) {
        Log.w(TAG, "BluetoothAdapter not initialized or unspecified address.");
        return false;
    }

    if (mBluetoothGatt != null) {
        Log.d(TAG, "Trying to use an existing mBluetoothGatt for connection.");
        if (mBluetoothGatt.connect()) {
            return true;
        } else {
            return false;
        }
    }

    final BluetoothDevice device = mBluetoothAdapter
            .getRemoteDevice(address);
    if (device == null) {
        Log.w(TAG, "Device not found.  Unable to connect.");
        return false;
    }

    mBluetoothGatt = device.connectGatt(mContext, false, mGattCallback);
    Log.d(TAG, "Trying to create a new connection.");
    return mBluetoothGatt.connect();
}

你应该注册一个回调来知道连接是否成功。

 private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
    @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {

        if (newState == BluetoothProfile.STATE_CONNECTED) {
            //bluetooth is connected so discover services
            mBluetoothGatt.discoverServices();

        } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
            //Bluetooth is disconnected
        }
    }

    @Override
    public void onServicesDiscovered(BluetoothGatt gatt, int status) {
        if (status == BluetoothGatt.GATT_SUCCESS) {
          // services are discoverd 
        }

        
    }

    @Override
    public void onCharacteristicRead(BluetoothGatt gatt,
                                     BluetoothGattCharacteristic characteristic,
                                     int status) {
        if (status == BluetoothGatt.GATT_SUCCESS) {
            
        }
    }

    @Override
    public void onCharacteristicChanged(BluetoothGatt gatt,
                                        BluetoothGattCharacteristic characteristic) {

    }

    @Override
    public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
        super.onCharacteristicWrite(gatt, characteristic, status);
       
    }
};

一旦发现服务,您就可以写入或读取服务。

使用此方法写入服务

 private boolean writeRXCharacteristic(byte[] value) {
    BluetoothGattService RxService = mBluetoothGatt.getService(/*Place service UUID*/);
    if (RxService == null) {
        //Service not supported
        return false;
    }
    BluetoothGattCharacteristic RxChar = RxService.getCharacteristic(/*RX_CHAR_UUID*/);
    if (RxChar == null) {
        // service not supported
        return false;
    }
     RxChar.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);
        RxChar.setValue(arr);
        return mBluetoothGatt.writeCharacteristic(RxChar);
}