简体   繁体   English

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

[英]Android App: Connecting to GATT server using UUIDs

I'm trying to connect to Bleno Periphecal GATT server from my android app.我正在尝试从我的 android 应用程序连接到 Bleno Periphecal GATT 服务器。

The GATT Server has Custom Service and Characteristic with unique UUIDs. GATT 服务器具有带有唯一 UUID 的自定义服务和特性。

How can I pinpoint connect to this server and send some text?如何确定连接到此服务器并发送一些文本?

The minimum SDK is 21, and target SDK is 24, so old BluetoothLE Scanning method is deprecated, and now I need to use BluetoothLEScanner.最低SDK是21,目标SDK是24,所以旧的BluetoothLE扫描方法被弃用,现在我需要使用BluetoothLEScanner。

For connecting Ble simply use this method pass mac address of your BTdevice.要连接 Ble,只需使用此方法传递 BT 设备的 mac 地址。

 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();
}

and you should register a callback to know connection is success or not.你应该注册一个回调来知道连接是否成功。

 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);
       
    }
};

once services are discoverd you can write or read from the services.一旦发现服务,您就可以写入或读取服务。

to write to a service use this method写入服务使用此方法

 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);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM