Flutter_blue: How to find out if we're already connected to a device?

Created on 5 Mar 2019  路  11Comments  路  Source: pauldemarco/flutter_blue

When my app start, I need to know if I'm already connected to a device. How can I do that using flutter_blue, I couldn't find the function anywhere.

Most helpful comment

try FlutterBlue.instance.connectedDevices

All 11 comments

What I do is keep track of the connected devices in the Flutter app itself. So when you are connected you just set a boolean to true.

Even better is to use this (also used in the Flutter Blue example):

deviceStateSubscription = device.onStateChanged().listen((s) {
  setState(() {
    deviceState = s;
  });
});

This will set deviceState to either of 4 states.

Then simply write a isConnected bool in your code:
bool get isConnected => (deviceState == BluetoothDeviceState.connected);

When the device you are connected to disconnects the deviceState should automatically be updated by the onStateChanged() stream.
When your Flutter app disconnects make sure you hard code deviceState = BluetoothDeviceState.disconnected; in your code. When you disconnect the deviceState = s; part may never be called again because device may already be null or the deviceStateSubscription is already cancelled or null (depending on your code).

As far as I can tell, the only way to know about connected devices is to keep track of it from the .connect() on? I don't see any way to pull already connected devices, via FlutterBlue or the platform. .scan() seems to skip connected ones as well.

I'm needing this too.
Using version 0.6.0+1.
The connect() function returns void. How to check if the connection succeded?

try FlutterBlue.instance.connectedDevices

I'm using the code below. But, it would be better if connect() returned the status.

void _connect(BluetoothDevice device) async {

    _stopScan();

    await device.connect();

    List<BluetoothDevice> connectedDevices = await flutterBlue.connectedDevices;

    if(connectedDevices.contains(device)) {
      Navigator.pushReplacementNamed(context, '/home');
    }
  }

I've two devices connected to my Galaxy Tab S3 but using @LastMonopoly snippet the connected devices list is always empty even if it is not the truth
image
image

@enricobenedos FlutterBlue.instance.connectedDevices will give u devices connected using FlutterBlue, not all Bluetooth-connected devices

@LastMonopoly thank you for the clarification!

So just to be clear, there is no way to get a list of the already connected devices to the phone prior to FlutterBlue being initialized? I am curious about what the limitations are that are stopping this from happening.

Just wondering as well if there is a way to know currently connected device NOT connected using flutter_blue.

I have the same issue! For security reasons there're bluetooth devices that don't broadcast themselves, but only connect to devices and don't let anyone find that device.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

FWeissenb picture FWeissenb  路  5Comments

M3sca picture M3sca  路  3Comments

Fleximex picture Fleximex  路  3Comments

pauldemarco picture pauldemarco  路  3Comments

ekuleshov picture ekuleshov  路  4Comments