[英]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.