Task DoConnect()
 {
     return(Task.Run(() =>
     {
         bool success = NativeGatt.Connect();
         _connectedHandle.WaitOne();
     }));
 }
        public bool Transmit(BluetoothGattCharacteristicModel characteristicModel, byte[] buffer)
        {
            bool result = default;

            if (_gatt.Connect())
            {
                var characteristic = _gatt.GetService(Java.Util.UUID.FromString(characteristicModel.ServiceUuid.ToString()))
                                     .GetCharacteristic(Java.Util.UUID.FromString(characteristicModel.Uuid.ToString()));

                characteristic.SetValue(buffer);

                result = _gatt.WriteCharacteristic(characteristic);
            }

            return(result);
        }
        Task PlatformConnect()
        {
            TaskCompletionSource <bool> tcs = new TaskCompletionSource <bool>();

            void handler(object s, ConnectionStateEventArgs e)
            {
                ConnectionStateChanged -= handler;

                switch (e.Status)
                {
                case ABluetooth.GattStatus.Success:
                    tcs.SetResult(e.State == ABluetooth.ProfileState.Connected);
                    break;

                default:
                    tcs.SetResult(false);
                    break;
                }
            }

            ConnectionStateChanged += handler;
            bool success = _gatt.Connect();

            if (success)
            {
                if (IsConnected)
                {
                    return(Task.FromResult(true));
                }

                return(tcs.Task);
            }
            else
            {
                ConnectionStateChanged -= handler;
                return(Task.FromException(new OperationCanceledException()));
            }
        }
        private void PerformConnectToDevice(IDevice device)
        {
            var bleDevice = device.NativeDevice as BluetoothDevice;
            if (bleDevice == null)
                return;

            var remoteDevice = _adapter.GetRemoteDevice(bleDevice.Address);
            if (remoteDevice == null)
                return;

            _gatt = remoteDevice.ConnectGatt(Android.App.Application.Context, false, _callback);
            _gatt.Connect();
        }