123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- 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();
- }
- /// <summary>
- /// Connect to the specified BluetoothDevice.
- /// </summary>
- /// <param name="device">The BluetoothDevice to connect to.</param>
- /// <param name="context">The Android context required for the connection.</param>
- 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);
- }
- /// <summary>
- /// Disconnect the current connection.
- /// </summary>
- public void Disconnect()
- {
- _bluetoothGatt?.Disconnect();
- _bluetoothGatt?.Close();
- _bluetoothGatt = null;
- }
- /// <summary>
- /// Custom GATT callback to handle Bluetooth events.
- /// </summary>
- 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())}");
- }
- }
- }
- }
|