using Android.Bluetooth;
using Android.Content;
using System;
namespace MyLibrary.Bluetooth
{
public class BLEConnector
{
private BluetoothGatt _bluetoothGatt;
private BluetoothGattCallback _gattCallback;
public BLEConnector()
{
_gattCallback = new CustomGattCallback();
}
///
/// Connect to the specified BluetoothDevice.
///
/// The BluetoothDevice to connect to.
/// The Android context required for the connection.
public void Connect(BluetoothDevice device, Context context)
{
if (device == null)
{
throw new ArgumentNullException(nameof(device), "Device cannot be null");
}
// Initiate the connection
_bluetoothGatt = device.ConnectGatt(context, false, _gattCallback);
}
///
/// Disconnect the current connection.
///
public void Disconnect()
{
_bluetoothGatt?.Disconnect();
_bluetoothGatt?.Close();
_bluetoothGatt = null;
}
///
/// Custom GATT callback to handle Bluetooth events.
///
private class CustomGattCallback : BluetoothGattCallback
{
public override void OnConnectionStateChange(BluetoothGatt gatt, GattStatus status, ProfileState newState)
{
base.OnConnectionStateChange(gatt, status, newState);
if (status == GattStatus.Success && newState == ProfileState.Connected)
{
Console.WriteLine("Connected to device!");
gatt.DiscoverServices();
}
else if (newState == ProfileState.Disconnected)
{
Console.WriteLine("Disconnected from device.");
}
else
{
Console.WriteLine($"Connection state changed: {newState}, Status: {status}");
}
}
public override void OnServicesDiscovered(BluetoothGatt gatt, GattStatus status)
{
base.OnServicesDiscovered(gatt, status);
if (status == GattStatus.Success)
{
Console.WriteLine("Services discovered:");
foreach (var service in gatt.Services)
{
Console.WriteLine($"Service: {service.Uuid}");
}
}
else
{
Console.WriteLine($"Failed to discover services. Status: {status}");
}
}
public override void OnCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, GattStatus status)
{
base.OnCharacteristicRead(gatt, characteristic, status);
if (status == GattStatus.Success)
{
Console.WriteLine($"Characteristic Read: {characteristic.Uuid}, Value: {BitConverter.ToString(characteristic.GetValue())}");
}
}
public override void OnCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, GattStatus status)
{
base.OnCharacteristicWrite(gatt, characteristic, status);
if (status == GattStatus.Success)
{
Console.WriteLine($"Characteristic Write Successful: {characteristic.Uuid}");
}
}
public override void OnCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic)
{
base.OnCharacteristicChanged(gatt, characteristic);
Console.WriteLine($"Characteristic Changed: {characteristic.Uuid}, Value: {BitConverter.ToString(characteristic.GetValue())}");
}
}
}
}