Skip to content

Android: startNotifications() hangs when pairing prompt is canceled #765

Open
@gion-andri

Description

@gion-andri

Describe the bug
I have an app where I connect to a device and then enable notifications. If Androids OS prompt to pair the device is aborted, the library is stuck, as onDescriptorWrite is never called, and thus the startNotifications function never resolves, so the queue in the plugin is stuck.

To Reproduce
Steps to reproduce the behavior:

  1. Connect to a device
  2. Call startNotifications
  3. If Android prompts to pair the device, press 'Cancel'
  4. See error

Expected behavior
The plugin should not be stuck if a user presses 'Cancel' in the OS prompt.

So I would expect the plugin to have a timeout when waiting for onDescriptorWrite (similar as in createBond). (Or detect if the pairing prompt is cancelled. I think this could be done by listening on bond‐state changes BOND_BONDING → BOND_NONE, bit I don't know how reliable this will work).

Plugin version:

  • @capacitor-community/bluetooth-le: 6.1.0

Smartphone (please complete the following information):

  • Device: different devices (Samsung, Pixel,...)
  • OS: different OS versions

Additional context

  • Calling BleClient.disableQueue() fixes this issue. (But I am currently afraid using that in production, as we are not sure, that we don't call somewhere some commands in paralell).

  • I could imagine, that this is also the source or related to BleClient Becomes Non-Responsive (Hangs Indefinitely) #734.

  • We probably work around this issue by manually trigger createBond before calling startNotifications. createBond has proper timeout and handling of canceling the propmpt, so in our case this can solve the issue.

I am not sure, what solution (timeout vs listening on bonding changes vs just better document the behaviour) is the preferred way to continue. If we agree on a way, I can provide a PR to change it as agreed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions