{"id":13795131,"url":"https://github.com/capacitor-community/bluetooth-le","last_synced_at":"2025-04-08T16:08:00.049Z","repository":{"id":37076298,"uuid":"318455713","full_name":"capacitor-community/bluetooth-le","owner":"capacitor-community","description":"Capacitor plugin for Bluetooth Low Energy","archived":false,"fork":false,"pushed_at":"2024-08-01T14:16:13.000Z","size":2079,"stargazers_count":276,"open_issues_count":30,"forks_count":81,"subscribers_count":11,"default_branch":"main","last_synced_at":"2024-10-04T01:35:08.800Z","etag":null,"topics":["bluetooth","capacitor","native","plugin"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/capacitor-community.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-12-04T08:44:07.000Z","updated_at":"2024-10-01T06:33:26.000Z","dependencies_parsed_at":"2023-10-04T10:28:40.747Z","dependency_job_id":"3ff7f1a1-f65c-491c-b4e8-3971b5507ee9","html_url":"https://github.com/capacitor-community/bluetooth-le","commit_stats":{"total_commits":286,"total_committers":10,"mean_commits":28.6,"dds":0.1503496503496503,"last_synced_commit":"b421d2937ff840e71723d19ceef0dc479f599a2d"},"previous_names":[],"tags_count":57,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/capacitor-community%2Fbluetooth-le","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/capacitor-community%2Fbluetooth-le/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/capacitor-community%2Fbluetooth-le/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/capacitor-community%2Fbluetooth-le/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/capacitor-community","download_url":"https://codeload.github.com/capacitor-community/bluetooth-le/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247878022,"owners_count":21011158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bluetooth","capacitor","native","plugin"],"created_at":"2024-08-03T23:00:52.492Z","updated_at":"2025-04-08T16:08:00.029Z","avatar_url":"https://github.com/capacitor-community.png","language":"TypeScript","funding_links":[],"categories":["Plugins","TypeScript","Community plugins"],"sub_categories":["Community Plugins"],"readme":"\u003cp align=\"center\"\u003e\u003cbr\u003e\u003cimg src=\"https://user-images.githubusercontent.com/236501/85893648-1c92e880-b7a8-11ea-926d-95355b8175c7.png\" width=\"128\" height=\"128\" /\u003e\u003c/p\u003e\n\u003ch3 align=\"center\"\u003eBluetooth Low Energy\u003c/h3\u003e\n\u003cp align=\"center\"\u003e\u003cstrong\u003e\u003ccode\u003e@capacitor-community/bluetooth-le\u003c/code\u003e\u003c/strong\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  Capacitor plugin for Bluetooth Low Energy \n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/maintenance/yes/2025?style=flat-square\" /\u003e\n  \u003ca href=\"https://github.com/capacitor-community/bluetooth-le/actions?query=workflow%3A%22CI%22\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/capacitor-community/bluetooth-le/main.yml?branch=main\u0026style=flat-square\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@capacitor-community/bluetooth-le\"\u003e\u003cimg src=\"https://img.shields.io/npm/l/@capacitor-community/bluetooth-le?style=flat-square\" /\u003e\u003c/a\u003e\n\u003cbr\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@capacitor-community/bluetooth-le\"\u003e\u003cimg src=\"https://img.shields.io/npm/dw/@capacitor-community/bluetooth-le?style=flat-square\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@capacitor-community/bluetooth-le\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@capacitor-community/bluetooth-le?style=flat-square\" /\u003e\u003c/a\u003e\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n\u003ca href=\"#contributors-\"\u003e\u003cimg src=\"https://img.shields.io/badge/all%20contributors-20-orange?style=flat-square\" /\u003e\u003c/a\u003e\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\u003c/p\u003e\n\n## Maintainers\n\n| Maintainer     | GitHub                                    |\n| -------------- | ----------------------------------------- |\n| Patrick Wespi  | [pwespi](https://github.com/pwespi)       |\n| Philip Peitsch | [peitschie](https://github.com/peitschie) |\n\n## Versions\n\n| Plugin | Capacitor | Documentation                                                                     |\n| ------ | --------- | --------------------------------------------------------------------------------- |\n| 7.x    | 7.x       | [README](https://github.com/capacitor-community/bluetooth-le/blob/main/README.md) |\n| 6.x    | 6.x       | [README](https://github.com/capacitor-community/bluetooth-le/blob/6.x/README.md)  |\n| 3.x    | 5.x       | [README](https://github.com/capacitor-community/bluetooth-le/blob/3.x/README.md)  |\n| 2.x    | 4.x       | [README](https://github.com/capacitor-community/bluetooth-le/blob/2.x/README.md)  |\n| 1.x    | 3.x       | [README](https://github.com/capacitor-community/bluetooth-le/blob/1.x/README.md)  |\n| 0.x    | 2.x       | [README](https://github.com/capacitor-community/bluetooth-le/blob/0.x/README.md)  |\n\n## Introduction\n\nThis is a Capacitor plugin for Bluetooth Low Energy. It supports the web, Android and iOS.\n\nThe goal is to support the same features on all platforms. Therefore the [Web Bluetooth API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Bluetooth_API) is taken as a guidline for what features to implement.\n\nThis plugin only supports Bluetooth **Low Energy**, not Bluetooth serial / classic.\n\nFurthermore the plugin only supports the central role of the Bluetooth Low Energy protocol. If you need the peripheral role, take a look a these plugins:\n\n- https://github.com/randdusing/cordova-plugin-bluetoothle\n- https://github.com/don/cordova-plugin-ble-peripheral\n\nFor support of Web Bluetooth in various browsers, see [implementation status](https://github.com/WebBluetoothCG/web-bluetooth/blob/main/implementation-status.md).\n\nBelow is an index of all the methods available.\n\n\u003cdocgen-index\u003e\n\n- [`initialize(...)`](#initialize)\n- [`isEnabled()`](#isenabled)\n- [`requestEnable()`](#requestenable)\n- [`enable()`](#enable)\n- [`disable()`](#disable)\n- [`startEnabledNotifications(...)`](#startenablednotifications)\n- [`stopEnabledNotifications()`](#stopenablednotifications)\n- [`isLocationEnabled()`](#islocationenabled)\n- [`openLocationSettings()`](#openlocationsettings)\n- [`openBluetoothSettings()`](#openbluetoothsettings)\n- [`openAppSettings()`](#openappsettings)\n- [`setDisplayStrings(...)`](#setdisplaystrings)\n- [`requestDevice(...)`](#requestdevice)\n- [`requestLEScan(...)`](#requestlescan)\n- [`stopLEScan()`](#stoplescan)\n- [`getDevices(...)`](#getdevices)\n- [`getBondedDevices()`](#getbondeddevices)\n- [`getConnectedDevices(...)`](#getconnecteddevices)\n- [`connect(...)`](#connect)\n- [`createBond(...)`](#createbond)\n- [`isBonded(...)`](#isbonded)\n- [`disconnect(...)`](#disconnect)\n- [`getServices(...)`](#getservices)\n- [`discoverServices(...)`](#discoverservices)\n- [`getMtu(...)`](#getmtu)\n- [`requestConnectionPriority(...)`](#requestconnectionpriority)\n- [`readRssi(...)`](#readrssi)\n- [`read(...)`](#read)\n- [`write(...)`](#write)\n- [`writeWithoutResponse(...)`](#writewithoutresponse)\n- [`readDescriptor(...)`](#readdescriptor)\n- [`writeDescriptor(...)`](#writedescriptor)\n- [`startNotifications(...)`](#startnotifications)\n- [`stopNotifications(...)`](#stopnotifications)\n- [Interfaces](#interfaces)\n- [Enums](#enums)\n\n\u003c/docgen-index\u003e\n\nSee [Platform Support](#platform-support) for an overview of supported methods on Android, iOS and web.\n\n## Installation\n\n```\nnpm install @capacitor-community/bluetooth-le\nnpx cap sync\n```\n\n### iOS\n\nOn iOS, add the `NSBluetoothAlwaysUsageDescription` to `Info.plist`, otherwise the app will crash when trying to use Bluetooth (see [here](https://developer.apple.com/documentation/corebluetooth)).\n\nIf the app needs to use Bluetooth while it is in the background, you also have to add `bluetooth-central` to `UIBackgroundModes` (for details see [here](https://developer.apple.com/documentation/bundleresources/information_property_list/uibackgroundmodes)).\n\n`./ios/App/App/Info.plist`:\n\n```diff\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003c!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"\u003e\n\u003cplist version=\"1.0\"\u003e\n\u003cdict\u003e\n\t\u003ckey\u003eCFBundleDevelopmentRegion\u003c/key\u003e\n\t\u003cstring\u003een\u003c/string\u003e\n  ...\n+\t\u003ckey\u003eNSBluetoothAlwaysUsageDescription\u003c/key\u003e\n+\t\u003cstring\u003eUses Bluetooth to connect and interact with peripheral BLE devices.\u003c/string\u003e\n+\t\u003ckey\u003eUIBackgroundModes\u003c/key\u003e\n+\t\u003carray\u003e\n+\t\t\u003cstring\u003ebluetooth-central\u003c/string\u003e\n+\t\u003c/array\u003e\n\u003c/dict\u003e\n\u003c/plist\u003e\n\n```\n\n**Note**: Bluetooth is **not** available in the iOS simulator. The `initialize` call will be rejected with an error \"BLE unsupported\". You have to test your app on a real device.\n\n### Android\n\nOn Android, no further steps are required to use the plugin.\n\n#### (Optional) Android 12 Bluetooth permissions\n\nIf your app targets Android 12 (API level 31) or higher and your app doesn't use Bluetooth scan results to derive physical location information, you can strongly assert that your app doesn't derive physical location. This allows the app to scan for Bluetooth devices without asking for location permissions. See the [Android documentation](https://developer.android.com/guide/topics/connectivity/bluetooth/permissions#declare-android12-or-higher).\n\nThe following steps are required to scan for Bluetooth devices without location permission on Android 12 devices:\n\n- In `android/variables.gradle`, make sure `compileSdkVersion` and `targetSdkVersion` are at least 31 (changing those values can have other consequences on your app, so make sure you know what you're doing).\n- In `android/app/src/main/AndroidManifest.xml`, update the permissions:\n  ```diff\n      \u003c!-- Permissions --\u003e\n  +   \u003cuses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" android:maxSdkVersion=\"30\" /\u003e\n  +   \u003cuses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" android:maxSdkVersion=\"30\" /\u003e\n  +   \u003cuses-permission android:name=\"android.permission.BLUETOOTH_SCAN\"\n  +     android:usesPermissionFlags=\"neverForLocation\"\n  +     tools:targetApi=\"s\" /\u003e\n  ```\n- Set the `androidNeverForLocation` flag to `true` when initializing the `BleClient`.\n  ```ts\n  import { BleClient } from '@capacitor-community/bluetooth-le';\n  await BleClient.initialize({ androidNeverForLocation: true });\n  ```\n\n\u003e [_Note_: If you include neverForLocation in your android:usesPermissionFlags, some BLE beacons are filtered from the scan results.](https://developer.android.com/guide/topics/connectivity/bluetooth/permissions#assert-never-for-location)\n\n## Configuration\n\nYou can configure the strings that are displayed in the device selection dialog on iOS and Android when using `requestDevice()`:\n\n`./capacitor.config.json`:\n\n```JSON\n{\n  \"...\": \"other configuration\",\n  \"plugins\": {\n    \"BluetoothLe\": {\n      \"displayStrings\": {\n        \"scanning\": \"Am Scannen...\",\n        \"cancel\": \"Abbrechen\",\n        \"availableDevices\": \"Verfügbare Geräte\",\n        \"noDeviceFound\": \"Kein Gerät gefunden\"\n      }\n    }\n  }\n}\n```\n\nThe default values are:\n\n```JSON\n{\n  \"plugins\": {\n    \"BluetoothLe\": {\n      \"displayStrings\": {\n        \"scanning\": \"Scanning...\",\n        \"cancel\": \"Cancel\",\n        \"availableDevices\": \"Available devices\",\n        \"noDeviceFound\": \"No device found\"\n      }\n    }\n  }\n}\n```\n\nThe display strings can also be set at run-time using [`setDisplayStrings(...)`](#setdisplaystrings).\n\n## Usage\n\nThere is a plugin wrapper class `BleClient` which makes events and method arguments easier to work with.\n\n```typescript\n// Import the wrapper class\nimport { BleClient } from '@capacitor-community/bluetooth-le';\n```\n\n**Note**: It is not recommended to use the `BluetoothLe` plugin class directly.\n\n### Heart rate monitor\n\nHere is an example of how to use the plugin. It shows how to read the heart rate from a BLE heart rate monitor such as the Polar H10.\n\n```typescript\nimport { BleClient, numbersToDataView, numberToUUID } from '@capacitor-community/bluetooth-le';\n\nconst HEART_RATE_SERVICE = '0000180d-0000-1000-8000-00805f9b34fb';\nconst HEART_RATE_MEASUREMENT_CHARACTERISTIC = '00002a37-0000-1000-8000-00805f9b34fb';\nconst BODY_SENSOR_LOCATION_CHARACTERISTIC = '00002a38-0000-1000-8000-00805f9b34fb';\nconst BATTERY_SERVICE = numberToUUID(0x180f);\nconst BATTERY_CHARACTERISTIC = numberToUUID(0x2a19);\nconst POLAR_PMD_SERVICE = 'fb005c80-02e7-f387-1cad-8acd2d8df0c8';\nconst POLAR_PMD_CONTROL_POINT = 'fb005c81-02e7-f387-1cad-8acd2d8df0c8';\n\nexport async function main(): Promise\u003cvoid\u003e {\n  try {\n    await BleClient.initialize();\n\n    const device = await BleClient.requestDevice({\n      services: [HEART_RATE_SERVICE],\n      optionalServices: [BATTERY_SERVICE, POLAR_PMD_SERVICE],\n    });\n\n    // connect to device, the onDisconnect callback is optional\n    await BleClient.connect(device.deviceId, (deviceId) =\u003e onDisconnect(deviceId));\n    console.log('connected to device', device);\n\n    const result = await BleClient.read(device.deviceId, HEART_RATE_SERVICE, BODY_SENSOR_LOCATION_CHARACTERISTIC);\n    console.log('body sensor location', result.getUint8(0));\n\n    const battery = await BleClient.read(device.deviceId, BATTERY_SERVICE, BATTERY_CHARACTERISTIC);\n    console.log('battery level', battery.getUint8(0));\n\n    await BleClient.write(device.deviceId, POLAR_PMD_SERVICE, POLAR_PMD_CONTROL_POINT, numbersToDataView([1, 0]));\n    console.log('written [1, 0] to control point');\n\n    await BleClient.startNotifications(\n      device.deviceId,\n      HEART_RATE_SERVICE,\n      HEART_RATE_MEASUREMENT_CHARACTERISTIC,\n      (value) =\u003e {\n        console.log('current heart rate', parseHeartRate(value));\n      },\n    );\n\n    // disconnect after 10 sec\n    setTimeout(async () =\u003e {\n      await BleClient.stopNotifications(device.deviceId, HEART_RATE_SERVICE, HEART_RATE_MEASUREMENT_CHARACTERISTIC);\n      await BleClient.disconnect(device.deviceId);\n      console.log('disconnected from device', device);\n    }, 10000);\n  } catch (error) {\n    console.error(error);\n  }\n}\n\nfunction onDisconnect(deviceId: string): void {\n  console.log(`device ${deviceId} disconnected`);\n}\n\nfunction parseHeartRate(value: DataView): number {\n  const flags = value.getUint8(0);\n  const rate16Bits = flags \u0026 0x1;\n  let heartRate: number;\n  if (rate16Bits \u003e 0) {\n    heartRate = value.getUint16(1, true);\n  } else {\n    heartRate = value.getUint8(1);\n  }\n  return heartRate;\n}\n```\n\n### Scanning API\n\nHere is an example of using the scanning API.\n\n```typescript\nimport { BleClient, numberToUUID } from '@capacitor-community/bluetooth-le';\n\nconst HEART_RATE_SERVICE = numberToUUID(0x180d);\n\nexport async function scan(): Promise\u003cvoid\u003e {\n  try {\n    await BleClient.initialize();\n\n    await BleClient.requestLEScan(\n      {\n        services: [HEART_RATE_SERVICE],\n      },\n      (result) =\u003e {\n        console.log('received new scan result', result);\n      },\n    );\n\n    setTimeout(async () =\u003e {\n      await BleClient.stopLEScan();\n      console.log('stopped scanning');\n    }, 5000);\n  } catch (error) {\n    console.error(error);\n  }\n}\n```\n\n## Example Applications\n\n- [BLE Tester](https://github.com/sourcya/ble-tester) (Ionic/React)\n- [OpenGoPro](https://github.com/gopro/OpenGoPro/tree/main/demos/ionic/file_transfer) (Ionic/Angular)\n- [Quasar BLE](https://github.com/nunogois/quasar-ble) (Quasar/Vue)\n\n## Platform Support\n\n_Note_: web support depends on the browser, see [implementation status](https://github.com/WebBluetoothCG/web-bluetooth/blob/main/implementation-status.md).\n\n| method                                                         | Android | iOS | web |\n| -------------------------------------------------------------- | :-----: | :-: | :-: |\n| [`initialize()`](#initialize)                                  |   ✅    | ✅  | ✅  |\n| [`isEnabled()`](#isenabled)                                    |   ✅    | ✅  | --  |\n| [`requestEnable()`](#requestEnable)                            |   ✅    | ❌  | ❌  |\n| [`enable()`](#enable)                                          |   ✅    | ❌  | ❌  |\n| [`disable()`](#disable)                                        |   ✅    | ❌  | ❌  |\n| [`startEnabledNotifications(...)`](#startenablednotifications) |   ✅    | ✅  | --  |\n| [`stopEnabledNotifications()`](#stopenablednotifications)      |   ✅    | ✅  | --  |\n| [`isLocationEnabled()`](#islocationenabled)                    |   ✅    | ❌  | ❌  |\n| [`openLocationSettings()`](#openlocationsettings)              |   ✅    | ❌  | ❌  |\n| [`openBluetoothSettings()`](#openbluetoothsettings)            |   ✅    | ❌  | ❌  |\n| [`openAppSettings()`](#openappsettings)                        |   ✅    | ✅  | ❌  |\n| [`setDisplayStrings(...)`](#setdisplaystrings)                 |   ✅    | ✅  | --  |\n| [`requestDevice(...)`](#requestdevice)                         |   ✅    | ✅  | ✅  |\n| [`requestLEScan(...)`](#requestlescan)                         |   ✅    | ✅  | 🚩  |\n| [`stopLEScan()`](#stoplescan)                                  |   ✅    | ✅  | 🚩  |\n| [`getDevices(...)`](#getdevices)                               |   ✅    | ✅  | 🚩  |\n| [`getBondedDevices(...)`](#getbondeddevices)                   |   ✅    | ❌  | ❌  |\n| [`getConnectedDevices(...)`](#getconnecteddevices)             |   ✅    | ✅  | 🚩  |\n| [`connect(...)`](#connect)                                     |   ✅    | ✅  | ✅  |\n| [`createBond(...)`](#createbond)                               |   ✅    | ❌  | ❌  |\n| [`isBonded(...)`](#isbonded)                                   |   ✅    | ❌  | ❌  |\n| [`disconnect(...)`](#disconnect)                               |   ✅    | ✅  | ✅  |\n| [`getServices(...)`](#getservices)                             |   ✅    | ✅  | ✅  |\n| [`discoverServices(...)`](#discoverservices)                   |   ✅    | ✅  | ❌  |\n| [`getMtu(...)`](#getmtu)                                       |   ✅    | ✅  | ❌  |\n| [`requestConnectionPriority(...)`](#requestconnectionpriority) |   ✅    | ❌  | ❌  |\n| [`readRssi(...)`](#readrssi)                                   |   ✅    | ✅  | ❌  |\n| [`read(...)`](#read)                                           |   ✅    | ✅  | ✅  |\n| [`write(...)`](#write)                                         |   ✅    | ✅  | ✅  |\n| [`readDescriptor(...)`](#readdescriptor)                       |   ✅    | ✅  | ✅  |\n| [`writeDescriptor(...)`](#writedescriptor)                     |   ✅    | ✅  | ✅  |\n| [`writeWithoutResponse(...)`](#writewithoutresponse)           |   ✅    | ✅  | ✅  |\n| [`startNotifications(...)`](#startnotifications)               |   ✅    | ✅  | ✅  |\n| [`stopNotifications(...)`](#stopnotifications)                 |   ✅    | ✅  | ✅  |\n\n#### Legend\n\n- ✅ supported\n- ❌ not supported (throws an `unavailable` error)\n- 🚩 behind a flag in Chrome (see [implementation status](https://github.com/WebBluetoothCG/web-bluetooth/blob/main/implementation-status.md))\n- -- not supported, but does not throw an error\n\n## API\n\n\u003cdocgen-api\u003e\n\u003c!--Update the source file JSDoc comments and rerun docgen to update the docs below--\u003e\n\n### initialize(...)\n\n```typescript\ninitialize(options?: InitializeOptions | undefined) =\u003e Promise\u003cvoid\u003e\n```\n\nInitialize Bluetooth Low Energy (BLE). If it fails, BLE might be unavailable on this device.\nOn **Android** it will ask for the location permission. On **iOS** it will ask for the Bluetooth permission.\nFor an example, see [usage](#usage).\n\n| Param         | Type                                                            |\n| ------------- | --------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#initializeoptions\"\u003eInitializeOptions\u003c/a\u003e\u003c/code\u003e |\n\n---\n\n### isEnabled()\n\n```typescript\nisEnabled() =\u003e Promise\u003cboolean\u003e\n```\n\nReports whether Bluetooth is enabled on this device.\nAlways returns `true` on **web**.\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;boolean\u0026gt;\u003c/code\u003e\n\n---\n\n### requestEnable()\n\n```typescript\nrequestEnable() =\u003e Promise\u003cvoid\u003e\n```\n\nRequest enabling Bluetooth. Show a system activity that allows the user to turn on Bluetooth. See https://developer.android.com/reference/android/bluetooth/BluetoothAdapter#ACTION_REQUEST_ENABLE\nOnly available on **Android**.\n\n---\n\n### enable()\n\n```typescript\nenable() =\u003e Promise\u003cvoid\u003e\n```\n\nEnable Bluetooth.\nOnly available on **Android**.\n**Deprecated** Will fail on Android SDK \u0026gt;= 33. Use `requestEnable` instead. See https://developer.android.com/reference/android/bluetooth/BluetoothAdapter#enable()\n\n---\n\n### disable()\n\n```typescript\ndisable() =\u003e Promise\u003cvoid\u003e\n```\n\nDisable Bluetooth.\nOnly available on **Android**.\n**Deprecated** Will fail on Android SDK \u0026gt;= 33. See https://developer.android.com/reference/android/bluetooth/BluetoothAdapter#disable()\n\n---\n\n### startEnabledNotifications(...)\n\n```typescript\nstartEnabledNotifications(callback: (value: boolean) =\u003e void) =\u003e Promise\u003cvoid\u003e\n```\n\nRegister a callback function that will be invoked when Bluetooth is enabled (true) or disabled (false) on this device.\nNot available on **web** (the callback will never be invoked).\n\n| Param          | Type                                     | Description                                                |\n| -------------- | ---------------------------------------- | ---------------------------------------------------------- |\n| **`callback`** | \u003ccode\u003e(value: boolean) =\u0026gt; void\u003c/code\u003e | Callback function to use when the Bluetooth state changes. |\n\n---\n\n### stopEnabledNotifications()\n\n```typescript\nstopEnabledNotifications() =\u003e Promise\u003cvoid\u003e\n```\n\nStop the enabled notifications registered with `startEnabledNotifications`.\n\n---\n\n### isLocationEnabled()\n\n```typescript\nisLocationEnabled() =\u003e Promise\u003cboolean\u003e\n```\n\nReports whether Location Services are enabled on this device.\nOnly available on **Android**.\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;boolean\u0026gt;\u003c/code\u003e\n\n---\n\n### openLocationSettings()\n\n```typescript\nopenLocationSettings() =\u003e Promise\u003cvoid\u003e\n```\n\nOpen Location settings.\nOnly available on **Android**.\n\n---\n\n### openBluetoothSettings()\n\n```typescript\nopenBluetoothSettings() =\u003e Promise\u003cvoid\u003e\n```\n\nOpen Bluetooth settings.\nOnly available on **Android**.\n\n---\n\n### openAppSettings()\n\n```typescript\nopenAppSettings() =\u003e Promise\u003cvoid\u003e\n```\n\nOpen App settings.\nNot available on **web**.\nOn **iOS** when a user declines the request to use Bluetooth on the first call of `initialize`, it is not possible\nto request for Bluetooth again from within the app. In this case Bluetooth has to be enabled in the app settings\nfor the app to be able use it.\n\n---\n\n### setDisplayStrings(...)\n\n```typescript\nsetDisplayStrings(displayStrings: DisplayStrings) =\u003e Promise\u003cvoid\u003e\n```\n\nSet the strings that are displayed in the `requestDevice` dialog.\n\n| Param                | Type                                                      |\n| -------------------- | --------------------------------------------------------- |\n| **`displayStrings`** | \u003ccode\u003e\u003ca href=\"#displaystrings\"\u003eDisplayStrings\u003c/a\u003e\u003c/code\u003e |\n\n---\n\n### requestDevice(...)\n\n```typescript\nrequestDevice(options?: RequestBleDeviceOptions | undefined) =\u003e Promise\u003cBleDevice\u003e\n```\n\nRequest a peripheral BLE device to interact with. This will scan for available devices according to the filters in the options and show a dialog to pick a device.\nFor an example, see [usage](#usage).\n\n| Param         | Type                                                                        | Description                                                             |\n| ------------- | --------------------------------------------------------------------------- | ----------------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#requestbledeviceoptions\"\u003eRequestBleDeviceOptions\u003c/a\u003e\u003c/code\u003e | Device filters, see [RequestBleDeviceOptions](#RequestBleDeviceOptions) |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#bledevice\"\u003eBleDevice\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n---\n\n### requestLEScan(...)\n\n```typescript\nrequestLEScan(options: RequestBleDeviceOptions, callback: (result: ScanResult) =\u003e void) =\u003e Promise\u003cvoid\u003e\n```\n\nStart scanning for BLE devices to interact with according to the filters in the options. The callback will be invoked on each device that is found.\nScanning will continue until `stopLEScan` is called. For an example, see [usage](#usage).\n**Note**: Use with care on **web** platform, the required API is still behind a flag in most browsers.\n\n| Param          | Type                                                                        |\n| -------------- | --------------------------------------------------------------------------- |\n| **`options`**  | \u003ccode\u003e\u003ca href=\"#requestbledeviceoptions\"\u003eRequestBleDeviceOptions\u003c/a\u003e\u003c/code\u003e |\n| **`callback`** | \u003ccode\u003e(result: \u003ca href=\"#scanresult\"\u003eScanResult\u003c/a\u003e) =\u0026gt; void\u003c/code\u003e      |\n\n---\n\n### stopLEScan()\n\n```typescript\nstopLEScan() =\u003e Promise\u003cvoid\u003e\n```\n\nStop scanning for BLE devices. For an example, see [usage](#usage).\n\n---\n\n### getDevices(...)\n\n```typescript\ngetDevices(deviceIds: string[]) =\u003e Promise\u003cBleDevice[]\u003e\n```\n\nOn iOS and web, if you want to connect to a previously connected device without scanning first, you can use `getDevice`.\nUses [retrievePeripherals](https://developer.apple.com/documentation/corebluetooth/cbcentralmanager/1519127-retrieveperipherals) on iOS and\n[getDevices](https://developer.mozilla.org/en-US/docs/Web/API/Bluetooth/getDevices) on web.\nOn Android, you can directly connect to the device with the deviceId.\n\n| Param           | Type                  | Description                                             |\n| --------------- | --------------------- | ------------------------------------------------------- |\n| **`deviceIds`** | \u003ccode\u003estring[]\u003c/code\u003e | List of device IDs, e.g. saved from a previous app run. |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;BleDevice[]\u0026gt;\u003c/code\u003e\n\n---\n\n### getBondedDevices()\n\n```typescript\ngetBondedDevices() =\u003e Promise\u003cBleDevice[]\u003e\n```\n\nGet a list of currently bonded devices.\nOnly available on **Android**.\nUses [getBondedDevices](\u003chttps://developer.android.com/reference/android/bluetooth/BluetoothAdapter#getBondedDevices()\u003e) on Android\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;BleDevice[]\u0026gt;\u003c/code\u003e\n\n---\n\n### getConnectedDevices(...)\n\n```typescript\ngetConnectedDevices(services: string[]) =\u003e Promise\u003cBleDevice[]\u003e\n```\n\nGet a list of currently connected devices.\nUses [retrieveConnectedPeripherals](https://developer.apple.com/documentation/corebluetooth/cbcentralmanager/1518924-retrieveconnectedperipherals) on iOS,\n[getConnectedDevices](\u003chttps://developer.android.com/reference/android/bluetooth/BluetoothManager#getConnectedDevices(int)\u003e) on Android\nand [getDevices](https://developer.mozilla.org/en-US/docs/Web/API/Bluetooth/getDevices) on web.\n\n| Param          | Type                  | Description                                                                                                              |\n| -------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------ |\n| **`services`** | \u003ccode\u003estring[]\u003c/code\u003e | List of services to filter the devices by. If no service is specified, no devices will be returned. Only applies to iOS. |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;BleDevice[]\u0026gt;\u003c/code\u003e\n\n---\n\n### connect(...)\n\n```typescript\nconnect(deviceId: string, onDisconnect?: ((deviceId: string) =\u003e void) | undefined, options?: TimeoutOptions | undefined) =\u003e Promise\u003cvoid\u003e\n```\n\nConnect to a peripheral BLE device. For an example, see [usage](#usage).\n\n| Param              | Type                                                      | Description                                                                                                    |\n| ------------------ | --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |\n| **`deviceId`**     | \u003ccode\u003estring\u003c/code\u003e                                       | The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan)) |\n| **`onDisconnect`** | \u003ccode\u003e((deviceId: string) =\u0026gt; void)\u003c/code\u003e              | Optional disconnect callback function that will be used when the device disconnects                            |\n| **`options`**      | \u003ccode\u003e\u003ca href=\"#timeoutoptions\"\u003eTimeoutOptions\u003c/a\u003e\u003c/code\u003e | Options for plugin call                                                                                        |\n\n---\n\n### createBond(...)\n\n```typescript\ncreateBond(deviceId: string, options?: TimeoutOptions | undefined) =\u003e Promise\u003cvoid\u003e\n```\n\nCreate a bond with a peripheral BLE device.\nOnly available on **Android**. On iOS bonding is handled by the OS.\n\n| Param          | Type                                                      | Description                                                                                                    |\n| -------------- | --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |\n| **`deviceId`** | \u003ccode\u003estring\u003c/code\u003e                                       | The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan)) |\n| **`options`**  | \u003ccode\u003e\u003ca href=\"#timeoutoptions\"\u003eTimeoutOptions\u003c/a\u003e\u003c/code\u003e | Options for plugin call                                                                                        |\n\n---\n\n### isBonded(...)\n\n```typescript\nisBonded(deviceId: string) =\u003e Promise\u003cboolean\u003e\n```\n\nReport whether a peripheral BLE device is bonded.\nOnly available on **Android**. On iOS bonding is handled by the OS.\n\n| Param          | Type                | Description                                                                                                    |\n| -------------- | ------------------- | -------------------------------------------------------------------------------------------------------------- |\n| **`deviceId`** | \u003ccode\u003estring\u003c/code\u003e | The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan)) |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;boolean\u0026gt;\u003c/code\u003e\n\n---\n\n### disconnect(...)\n\n```typescript\ndisconnect(deviceId: string) =\u003e Promise\u003cvoid\u003e\n```\n\nDisconnect from a peripheral BLE device. For an example, see [usage](#usage).\n\n| Param          | Type                | Description                                                                                                    |\n| -------------- | ------------------- | -------------------------------------------------------------------------------------------------------------- |\n| **`deviceId`** | \u003ccode\u003estring\u003c/code\u003e | The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan)) |\n\n---\n\n### getServices(...)\n\n```typescript\ngetServices(deviceId: string) =\u003e Promise\u003cBleService[]\u003e\n```\n\nGet services, characteristics and descriptors of a device.\n\n| Param          | Type                | Description                                                                                                    |\n| -------------- | ------------------- | -------------------------------------------------------------------------------------------------------------- |\n| **`deviceId`** | \u003ccode\u003estring\u003c/code\u003e | The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan)) |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;BleService[]\u0026gt;\u003c/code\u003e\n\n---\n\n### discoverServices(...)\n\n```typescript\ndiscoverServices(deviceId: string) =\u003e Promise\u003cvoid\u003e\n```\n\nDiscover services, characteristics and descriptors of a device.\nYou only need this method if your peripheral device changes its services and characteristics at runtime.\nIf the discovery was successful, the remote services can be retrieved using the getServices function.\nNot available on **web**.\n\n| Param          | Type                | Description                                                                                                    |\n| -------------- | ------------------- | -------------------------------------------------------------------------------------------------------------- |\n| **`deviceId`** | \u003ccode\u003estring\u003c/code\u003e | The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan)) |\n\n---\n\n### getMtu(...)\n\n```typescript\ngetMtu(deviceId: string) =\u003e Promise\u003cnumber\u003e\n```\n\nGet the MTU of a connected device. Note that the maximum write value length is 3 bytes less than the MTU.\nNot available on **web**.\n\n| Param          | Type                | Description                                                                                                    |\n| -------------- | ------------------- | -------------------------------------------------------------------------------------------------------------- |\n| **`deviceId`** | \u003ccode\u003estring\u003c/code\u003e | The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan)) |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;number\u0026gt;\u003c/code\u003e\n\n---\n\n### requestConnectionPriority(...)\n\n```typescript\nrequestConnectionPriority(deviceId: string, connectionPriority: ConnectionPriority) =\u003e Promise\u003cvoid\u003e\n```\n\nRequest a connection parameter update.\nOnly available on **Android**. https://developer.android.com/reference/android/bluetooth/BluetoothGatt#requestConnectionPriority(int)\n\n| Param                    | Type                                                              | Description                                                                                                    |\n| ------------------------ | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |\n| **`deviceId`**           | \u003ccode\u003estring\u003c/code\u003e                                               | The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan)) |\n| **`connectionPriority`** | \u003ccode\u003e\u003ca href=\"#connectionpriority\"\u003eConnectionPriority\u003c/a\u003e\u003c/code\u003e | Request a specific connection priority. See [ConnectionPriority](#connectionpriority)                          |\n\n---\n\n### readRssi(...)\n\n```typescript\nreadRssi(deviceId: string) =\u003e Promise\u003cnumber\u003e\n```\n\nRead the RSSI value of a connected device.\nNot available on **web**.\n\n| Param          | Type                | Description                                                                                                    |\n| -------------- | ------------------- | -------------------------------------------------------------------------------------------------------------- |\n| **`deviceId`** | \u003ccode\u003estring\u003c/code\u003e | The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan)) |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;number\u0026gt;\u003c/code\u003e\n\n---\n\n### read(...)\n\n```typescript\nread(deviceId: string, service: string, characteristic: string, options?: TimeoutOptions | undefined) =\u003e Promise\u003cDataView\u003e\n```\n\nRead the value of a characteristic. For an example, see [usage](#usage).\n\n| Param                | Type                                                      | Description                                                                                                    |\n| -------------------- | --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |\n| **`deviceId`**       | \u003ccode\u003estring\u003c/code\u003e                                       | The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan)) |\n| **`service`**        | \u003ccode\u003estring\u003c/code\u003e                                       | UUID of the service (see [UUID format](#uuid-format))                                                          |\n| **`characteristic`** | \u003ccode\u003estring\u003c/code\u003e                                       | UUID of the characteristic (see [UUID format](#uuid-format))                                                   |\n| **`options`**        | \u003ccode\u003e\u003ca href=\"#timeoutoptions\"\u003eTimeoutOptions\u003c/a\u003e\u003c/code\u003e | Options for plugin call                                                                                        |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#dataview\"\u003eDataView\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n---\n\n### write(...)\n\n```typescript\nwrite(deviceId: string, service: string, characteristic: string, value: DataView, options?: TimeoutOptions | undefined) =\u003e Promise\u003cvoid\u003e\n```\n\nWrite a value to a characteristic. For an example, see [usage](#usage).\n\n| Param                | Type                                                      | Description                                                                                                                                                                                 |\n| -------------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`deviceId`**       | \u003ccode\u003estring\u003c/code\u003e                                       | The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))                                                                              |\n| **`service`**        | \u003ccode\u003estring\u003c/code\u003e                                       | UUID of the service (see [UUID format](#uuid-format))                                                                                                                                       |\n| **`characteristic`** | \u003ccode\u003estring\u003c/code\u003e                                       | UUID of the characteristic (see [UUID format](#uuid-format))                                                                                                                                |\n| **`value`**          | \u003ccode\u003e\u003ca href=\"#dataview\"\u003eDataView\u003c/a\u003e\u003c/code\u003e             | The value to write as a \u003ca href=\"#dataview\"\u003eDataView\u003c/a\u003e. To create a \u003ca href=\"#dataview\"\u003eDataView\u003c/a\u003e from an array of numbers, there is a helper function, e.g. numbersToDataView([1, 0]) |\n| **`options`**        | \u003ccode\u003e\u003ca href=\"#timeoutoptions\"\u003eTimeoutOptions\u003c/a\u003e\u003c/code\u003e | Options for plugin call                                                                                                                                                                     |\n\n---\n\n### writeWithoutResponse(...)\n\n```typescript\nwriteWithoutResponse(deviceId: string, service: string, characteristic: string, value: DataView, options?: TimeoutOptions | undefined) =\u003e Promise\u003cvoid\u003e\n```\n\nWrite a value to a characteristic without waiting for a response.\n\n| Param                | Type                                                      | Description                                                                                                                                                                                 |\n| -------------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`deviceId`**       | \u003ccode\u003estring\u003c/code\u003e                                       | The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))                                                                              |\n| **`service`**        | \u003ccode\u003estring\u003c/code\u003e                                       | UUID of the service (see [UUID format](#uuid-format))                                                                                                                                       |\n| **`characteristic`** | \u003ccode\u003estring\u003c/code\u003e                                       | UUID of the characteristic (see [UUID format](#uuid-format))                                                                                                                                |\n| **`value`**          | \u003ccode\u003e\u003ca href=\"#dataview\"\u003eDataView\u003c/a\u003e\u003c/code\u003e             | The value to write as a \u003ca href=\"#dataview\"\u003eDataView\u003c/a\u003e. To create a \u003ca href=\"#dataview\"\u003eDataView\u003c/a\u003e from an array of numbers, there is a helper function, e.g. numbersToDataView([1, 0]) |\n| **`options`**        | \u003ccode\u003e\u003ca href=\"#timeoutoptions\"\u003eTimeoutOptions\u003c/a\u003e\u003c/code\u003e | Options for plugin call                                                                                                                                                                     |\n\n---\n\n### readDescriptor(...)\n\n```typescript\nreadDescriptor(deviceId: string, service: string, characteristic: string, descriptor: string, options?: TimeoutOptions | undefined) =\u003e Promise\u003cDataView\u003e\n```\n\nRead the value of a descriptor.\n\n| Param                | Type                                                      | Description                                                                                                    |\n| -------------------- | --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |\n| **`deviceId`**       | \u003ccode\u003estring\u003c/code\u003e                                       | The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan)) |\n| **`service`**        | \u003ccode\u003estring\u003c/code\u003e                                       | UUID of the service (see [UUID format](#uuid-format))                                                          |\n| **`characteristic`** | \u003ccode\u003estring\u003c/code\u003e                                       | UUID of the characteristic (see [UUID format](#uuid-format))                                                   |\n| **`descriptor`**     | \u003ccode\u003estring\u003c/code\u003e                                       | UUID of the descriptor (see [UUID format](#uuid-format))                                                       |\n| **`options`**        | \u003ccode\u003e\u003ca href=\"#timeoutoptions\"\u003eTimeoutOptions\u003c/a\u003e\u003c/code\u003e | Options for plugin call                                                                                        |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#dataview\"\u003eDataView\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n---\n\n### writeDescriptor(...)\n\n```typescript\nwriteDescriptor(deviceId: string, service: string, characteristic: string, descriptor: string, value: DataView, options?: TimeoutOptions | undefined) =\u003e Promise\u003cvoid\u003e\n```\n\nWrite a value to a descriptor.\n\n| Param                | Type                                                      | Description                                                                                                                                                                                 |\n| -------------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`deviceId`**       | \u003ccode\u003estring\u003c/code\u003e                                       | The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan))                                                                              |\n| **`service`**        | \u003ccode\u003estring\u003c/code\u003e                                       | UUID of the service (see [UUID format](#uuid-format))                                                                                                                                       |\n| **`characteristic`** | \u003ccode\u003estring\u003c/code\u003e                                       | UUID of the characteristic (see [UUID format](#uuid-format))                                                                                                                                |\n| **`descriptor`**     | \u003ccode\u003estring\u003c/code\u003e                                       | UUID of the descriptor (see [UUID format](#uuid-format))                                                                                                                                    |\n| **`value`**          | \u003ccode\u003e\u003ca href=\"#dataview\"\u003eDataView\u003c/a\u003e\u003c/code\u003e             | The value to write as a \u003ca href=\"#dataview\"\u003eDataView\u003c/a\u003e. To create a \u003ca href=\"#dataview\"\u003eDataView\u003c/a\u003e from an array of numbers, there is a helper function, e.g. numbersToDataView([1, 0]) |\n| **`options`**        | \u003ccode\u003e\u003ca href=\"#timeoutoptions\"\u003eTimeoutOptions\u003c/a\u003e\u003c/code\u003e | Options for plugin call                                                                                                                                                                     |\n\n---\n\n### startNotifications(...)\n\n```typescript\nstartNotifications(deviceId: string, service: string, characteristic: string, callback: (value: DataView) =\u003e void) =\u003e Promise\u003cvoid\u003e\n```\n\nStart listening to changes of the value of a characteristic.\nNote that you should only start the notifications once per characteristic in your app and share the data and\nnot call `startNotifications` in every component that needs the data.\nFor an example, see [usage](#usage).\n\n| Param                | Type                                                              | Description                                                                                                    |\n| -------------------- | ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |\n| **`deviceId`**       | \u003ccode\u003estring\u003c/code\u003e                                               | The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan)) |\n| **`service`**        | \u003ccode\u003estring\u003c/code\u003e                                               | UUID of the service (see [UUID format](#uuid-format))                                                          |\n| **`characteristic`** | \u003ccode\u003estring\u003c/code\u003e                                               | UUID of the characteristic (see [UUID format](#uuid-format))                                                   |\n| **`callback`**       | \u003ccode\u003e(value: \u003ca href=\"#dataview\"\u003eDataView\u003c/a\u003e) =\u0026gt; void\u003c/code\u003e | Callback function to use when the value of the characteristic changes                                          |\n\n---\n\n### stopNotifications(...)\n\n```typescript\nstopNotifications(deviceId: string, service: string, characteristic: string) =\u003e Promise\u003cvoid\u003e\n```\n\nStop listening to the changes of the value of a characteristic. For an example, see [usage](#usage).\n\n| Param                | Type                | Description                                                                                                    |\n| -------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------- |\n| **`deviceId`**       | \u003ccode\u003estring\u003c/code\u003e | The ID of the device to use (obtained from [requestDevice](#requestDevice) or [requestLEScan](#requestLEScan)) |\n| **`service`**        | \u003ccode\u003estring\u003c/code\u003e | UUID of the service (see [UUID format](#uuid-format))                                                          |\n| **`characteristic`** | \u003ccode\u003estring\u003c/code\u003e | UUID of the characteristic (see [UUID format](#uuid-format))                                                   |\n\n---\n\n### Interfaces\n\n#### InitializeOptions\n\n| Prop                          | Type                 | Description                                                                                                                                                                                                                                                                                                                                      | Default            |\n| ----------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------ |\n| **`androidNeverForLocation`** | \u003ccode\u003eboolean\u003c/code\u003e | If your app doesn't use Bluetooth scan results to derive physical location information, you can strongly assert that your app doesn't derive physical location. (Android only) Requires adding 'neverForLocation' to AndroidManifest.xml https://developer.android.com/guide/topics/connectivity/bluetooth/permissions#assert-never-for-location | \u003ccode\u003efalse\u003c/code\u003e |\n\n#### DisplayStrings\n\n| Prop                   | Type                | Default                          | Since |\n| ---------------------- | ------------------- | -------------------------------- | ----- |\n| **`scanning`**         | \u003ccode\u003estring\u003c/code\u003e | \u003ccode\u003e\"Scanning...\"\u003c/code\u003e       | 0.0.1 |\n| **`cancel`**           | \u003ccode\u003estring\u003c/code\u003e | \u003ccode\u003e\"Cancel\"\u003c/code\u003e            | 0.0.1 |\n| **`availableDevices`** | \u003ccode\u003estring\u003c/code\u003e | \u003ccode\u003e\"Available devices\"\u003c/code\u003e | 0.0.1 |\n| **`noDeviceFound`**    | \u003ccode\u003estring\u003c/code\u003e | \u003ccode\u003e\"No device found\"\u003c/code\u003e   | 0.0.1 |\n\n#### BleDevice\n\n| Prop           | Type                  | Description                                                                                                                                       |\n| -------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`deviceId`** | \u003ccode\u003estring\u003c/code\u003e   | ID of the device, which will be needed for further calls. On **Android** this is the BLE MAC address. On **iOS** and **web** it is an identifier. |\n| **`name`**     | \u003ccode\u003estring\u003c/code\u003e   | Name of the peripheral device.                                                                                                                    |\n| **`uuids`**    | \u003ccode\u003estring[]\u003c/code\u003e |                                                                                                                                                   |\n\n#### RequestBleDeviceOptions\n\n| Prop                   | Type                                          | Description                                                                                                                                                                                                                                               |\n| ---------------------- | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`services`**         | \u003ccode\u003estring[]\u003c/code\u003e                         | Filter devices by service UUIDs. UUIDs have to be specified as 128 bit UUID strings, e.g. ['0000180d-0000-1000-8000-00805f9b34fb'] There is a helper function to convert numbers to UUIDs. e.g. [numberToUUID(0x180f)]. (see [UUID format](#uuid-format)) |\n| **`name`**             | \u003ccode\u003estring\u003c/code\u003e                           | Filter devices by name                                                                                                                                                                                                                                    |\n| **`namePrefix`**       | \u003ccode\u003estring\u003c/code\u003e                           | Filter devices by name prefix                                                                                                                                                                                                                             |\n| **`optionalServices`** | \u003ccode\u003estring[]\u003c/code\u003e                         | For **web**, all services that will be used have to be listed under services or optionalServices, e.g. [numberToUUID(0x180f)] (see [UUID format](#uuid-format))                                                                                           |\n| **`allowDuplicates`**  | \u003ccode\u003eboolean\u003c/code\u003e                          | Normally scans will discard the second and subsequent advertisements from a single device. If you need to receive them, set allowDuplicates to true (only applicable in `requestLEScan`). (default: false)                                                |\n| **`scanMode`**         | \u003ccode\u003e\u003ca href=\"#scanmode\"\u003eScanMode\u003c/a\u003e\u003c/code\u003e | Android scan mode (default: \u003ca href=\"#scanmode\"\u003eScanMode.SCAN_MODE_BALANCED\u003c/a\u003e)                                                                                                                                                                          |\n\n#### ScanResult\n\n| Prop                   | Type                                                              | Description                                                                                                                                                                                                                                                                                           |\n| ---------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`device`**           | \u003ccode\u003e\u003ca href=\"#bledevice\"\u003eBleDevice\u003c/a\u003e\u003c/code\u003e                   | The peripheral device that was found in the scan. **Android** and **web**: `device.name` is always identical to `localName`. **iOS**: `device.name` is identical to `localName` the first time a device is discovered, but after connecting `device.name` is the cached GAP name in subsequent scans. |\n| **`localName`**        | \u003ccode\u003estring\u003c/code\u003e                                               | The name of the peripheral device from the advertisement data.                                                                                                                                                                                                                                        |\n| **`rssi`**             | \u003ccode\u003enumber\u003c/code\u003e                                               | Received Signal Strength Indication.                                                                                                                                                                                                                                                                  |\n| **`txPower`**          | \u003ccode\u003enumber\u003c/code\u003e                                               | Transmit power in dBm. A value of 127 indicates that it is not available.                                                                                                                                                                                                                             |\n| **`manufacturerData`** | \u003ccode\u003e{ [key: string]: \u003ca href=\"#dataview\"\u003eDataView\u003c/a\u003e; }\u003c/code\u003e | Manufacturer data, key is a company identifier and value is the data.                                                                                                                                                                                                                                 |\n| **`serviceData`**      | \u003ccode\u003e{ [key: string]: \u003ca href=\"#dataview\"\u003eDataView\u003c/a\u003e; }\u003c/code\u003e | Service data, key is a service UUID and value is the data.                                                                                                                                                                                                                                            |\n| **`uuids`**            | \u003ccode\u003estring[]\u003c/code\u003e                                             | Advertised services.                                                                                                                                                                                                                                                                                  |\n| **`rawAdvertisement`** | \u003ccode\u003e\u003ca href=\"#dataview\"\u003eDataView\u003c/a\u003e\u003c/code\u003e                     | Raw advertisement data (**Android** only).                                                                                                                                                                                                                                                            |\n\n#### DataView\n\n| Prop             | Type                                                |\n| ---------------- | --------------------------------------------------- |\n| **`buffer`**     | \u003ccode\u003e\u003ca href=\"#arraybuffer\"\u003eArrayBuffer\u003c/a\u003e\u003c/code\u003e |\n| **`byteLength`** | \u003ccode\u003enumber\u003c/code\u003e                                 |\n| **`byteOffset`** | \u003ccode\u003enumber\u003c/code\u003e                                 |\n\n| Method         | Signature                                                                           | Description                                                                                                                                                         |\n| -------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **getFloat32** | (byteOffset: number, littleEndian?: boolean \\| undefined) =\u0026gt; number              | Gets the Float32 value at the specified byte offset from the start of the view. There is no alignment constraint; multi-byte values may be fetched from any offset. |\n| **getFloat64** | (byteOffset: number, littleEndian?: boolean \\| undefined) =\u0026gt; number              | Gets the Float64 value at the specified byte offset from the start of the view. There is no alignment constraint; multi-byte values may be fetched from any offset. |\n| **getInt8**    | (byteOffset: number) =\u0026gt; number                                                   | Gets the Int8 value at the specified byte offset from the start of the view. There is no alignment constraint; multi-byte values may be fetched from any offset.    |\n| **getInt16**   | (byteOffset: number, littleEndian?: boolean \\| undefined) =\u0026gt; number              | Gets the Int16 value at the specified byte offset from the start of the view. There is no alignment constraint; multi-byte values may be fetched from any offset.   |\n| **getInt32**   | (byteOffset: number, littleEndian?: boolean \\| undefined) =\u0026gt; number              | Gets the Int32 value at the specified byte offset from the start of the view. There is no alignment constraint; multi-byte values may be fetched from any offset.   |\n| **getUint8**   | (byteOffset: number) =\u0026gt; number                                                   | Gets the Uint8 value at the specified byte offset from the start of the view. There is no alignment constraint; multi-byte values may be fetched from any offset.   |\n| **getUint16**  | (byteOffset: number, littleEndian?: boolean \\| undefined) =\u0026gt; number              | Gets the Uint16 value at the specified byte offset from the start of the view. There is no alignment constraint; multi-byte values may be fetched from any offset.  |\n| **getUint32**  | (byteOffset: number, littleEndian?: boolean \\| undefined) =\u0026gt; number              | Gets the Uint32 value at the specified byte offset from the start of the view. There is no alignment constraint; multi-byte values may be fetched from any offset.  |\n| **setFloat32** | (byteOffset: number, value: number, littleEndian?: boolean \\| undefined) =\u0026gt; void | Stores an Float32 value at the specified byte offset from the start of the view.                                                                                    |\n| **setFloat64** | (byteOffset: number, value: number, littleEndian?: boolean \\| undefined) =\u0026gt; void | Stores an Float64 value at the specified byte offset from the start of the view.                                                                                    |\n| **setInt8**    | (byteOffset: number, value: number) =\u0026gt; void                                      | Stores an Int8 value at the specified byte offset from the start of the view.                                                                                       |\n| **setInt16**   | (byteOffset: number, value: number, littleEndian?: boolean \\| undefined) =\u0026gt; void | Stores an Int16 value at the specified byte offset from the start of the view.                                                                                      |\n| **setInt32**   | (byteOffset: number, value: number, littleEndian?: boolean \\| undefined) =\u0026gt; void | Stores an Int32 value at the specified byte offset from the start of the view.                                                                                      |\n| **setUint8**   | (byteOffset: number, value: number) =\u0026gt; void                                      | Stores an Uint8 value at the specified byte offset from the start of the view.                                                                                      |\n| **setUint16**  | (byteOffset: number, value: number, littleEndian?: boolean \\| undefined) =\u0026gt; void | Stores an Uint16 value at the specified byte offset from the start of the view.                                                                                     |\n| **setUint32**  | (byteOffset: number, value: number, littleEndian?: boolean \\| undefined) =\u0026gt; void | Stores an Uint32 value at the specified byte offset from the start of the view.                                                                                     |\n\n#### ArrayBuffer\n\nRepresents a raw buffer of binary data, which is used to store data for the\ndifferent typed arrays. ArrayBuffers cannot be read from or written to directly,\nbut can be passed to a typed array or \u003ca href=\"#dataview\"\u003eDataView\u003c/a\u003e Object to interpret the raw\nbuffer as needed.\n\n| Prop             | Type                | Description                                                                     |\n| ---------------- | ------------------- | ------------------------------------------------------------------------------- |\n| **`byteLength`** | \u003ccode\u003enumber\u003c/code\u003e | Read-only. The length of the \u003ca href=\"#arraybuffer\"\u003eArrayBuffer\u003c/a\u003e (in bytes). |\n\n| Method    | Signature                                                                               | Description                                                     |\n| --------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------- |\n| **slice** | (begin: number, end?: number \\| undefined) =\u0026gt; \u003ca href=\"#arraybuffer\"\u003eArrayBuffer\u003c/a\u003e | Returns a section of an \u003ca href=\"#arraybuffer\"\u003eArrayBuffer\u003c/a\u003e. |\n\n#### TimeoutOptions\n\n| Prop          | Type                | Description                                                                                                |\n| ------------- | ------------------- | ---------------------------------------------------------------------------------------------------------- |\n| **`timeout`** | \u003ccode\u003enumber\u003c/code\u003e | Timeout in milliseconds for plugin call. Default is 10000 for `connect` and 5000 for other plugin methods. |\n\n#### BleService\n\n| Prop                  | Type                             |\n| --------------------- | -------------------------------- |\n| **`uuid`**            | \u003ccode\u003estring\u003c/code\u003e              |\n| **`characteristics`** | \u003ccode\u003eBleCharacteristic[]\u003c/code\u003e |\n\n#### BleCharacteristic\n\n| Prop              | Type                                                                                |\n| ----------------- | ----------------------------------------------------------------------------------- |\n| **`uuid`**        | \u003ccode\u003estring\u003c/code\u003e                                                                 |\n| **`properties`**  | \u003ccode\u003e\u003ca href=\"#blecharacteristicproperties\"\u003eBleCharacteristicProperties\u003c/a\u003e\u003c/code\u003e |\n| **`descriptors`** | \u003ccode\u003eBleDescriptor[]\u003c/code\u003e                                                        |\n\n#### BleCharacteristicProperties\n\n| Prop                             | Type                 |\n| -------------------------------- | -------------------- |\n| **`broadcast`**                  | \u003ccode\u003eboolean\u003c/code\u003e |\n| **`read`**                       | \u003ccode\u003eboolean\u003c/code\u003e |\n| **`writeWithoutResponse`**       | \u003ccode\u003eboolean\u003c/code\u003e |\n| **`write`**                      | \u003ccode\u003eboolean\u003c/code\u003e |\n| **`notify`**                     | \u003ccode\u003eboolean\u003c/code\u003e |\n| **`indicate`**                   | \u003ccode\u003eboolean\u003c/code\u003e |\n| **`authenticatedSignedWrites`**  | \u003ccode\u003eboolean\u003c/code\u003e |\n| **`reliableWrite`**              | \u003ccode\u003eboolean\u003c/code\u003e |\n| **`writableAuxiliaries`**        | \u003ccode\u003eboolean\u003c/code\u003e |\n| **`extendedProperties`**         | \u003ccode\u003eboolean\u003c/code\u003e |\n| **`notifyEncryptionRequired`**   | \u003ccode\u003eboolean\u003c/code\u003e |\n| **`indicateEncryptionRequired`** | \u003ccode\u003eboolean\u003c/code\u003e |\n\n#### BleDescriptor\n\n| Prop       | Type                |\n| ---------- | ------------------- |\n| **`uuid`** | \u003ccode\u003estring\u003c/code\u003e |\n\n### Enums\n\n#### ScanMode\n\n| Members                     | Value          | Description                                                                                                                                                                                                                                                               |\n| --------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`SCAN_MODE_LOW_POWER`**   | \u003ccode\u003e0\u003c/code\u003e | Perform Bluetooth LE scan in low power mode. This mode is enforced if the scanning application is not in foreground. https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_LOW_POWER                                                        |\n| **`SCAN_MODE_BALANCED`**    | \u003ccode\u003e1\u003c/code\u003e | Perform Bluetooth LE scan in balanced power mode. (default) Scan results are returned at a rate that provides a good trade-off between scan frequency and power consumption. https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_BALANCED |\n| **`SCAN_MODE_LOW_LATENCY`** | \u003ccode\u003e2\u003c/code\u003e | Scan using highest duty cycle. It's recommended to only use this mode when the application is running in the foreground. https://developer.android.com/reference/android/bluetooth/le/ScanSettings#SCAN_MODE_LOW_LATENCY                                                  |\n\n#### ConnectionPriority\n\n| Members                             | Value          | Description                                                                                                                                                                                                                                                                                                                                                                                                        |\n| ----------------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| **`CONNECTION_PRIORITY_BALANCED`**  | \u003ccode\u003e0\u003c/code\u003e | Use the connection parameters recommended by the Bluetooth SIG. This is the default value if no connection parameter update is requested. https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_BALANCED                                                                                                                                                                     |\n| **`CONNECTION_PRIORITY_HIGH`**      | \u003ccode\u003e1\u003c/code\u003e | Request a high priority, low latency connection. An application should only request high priority connection parameters to transfer large amounts of data over LE quickly. Once the transfer is complete, the application should request CONNECTION_PRIORITY_BALANCED connection parameters to reduce energy use. https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_HIGH |\n| **`CONNECTION_PRIORITY_LOW_POWER`** | \u003ccode\u003e2\u003c/code\u003e | Request low power, reduced data rate connection parameters. https://developer.android.com/reference/android/bluetooth/BluetoothGatt#CONNECTION_PRIORITY_LOW_POWER                                                                                                                                                                                                                                                  |\n\n\u003c/docgen-api\u003e\n\n### UUID format\n\nAll UUIDs have to be provided in 128 bit format as string, e.g. `'0000180d-0000-1000-8000-00805f9b34fb'`. There is a helper function to convert 16 bit UUID numbers to string:\n\n```typescript\nimport { numberToUUID } from '@capacitor-community/bluetooth-le';\n\nconst HEART_RATE_SERVICE = numberToUUID(0x180d);\n// '0000180d-0000-1000-8000-00805f9b34fb'\n```\n\n## Troubleshooting\n\n#### Connection fails on Android\n\nOn some Android devices `connect()` may fail when the device was connected before, even if the device is not actually connected.\nIn that case you should first call `disconnect()`, e.g.:\n\n```typesceript\nconst device = await BleClient.requestDevice({\n   // ...\n});\n// ...\nawait BleClient.disconnect(device.deviceId);\nawait BleClient.connect(device.deviceId);\n```\n\n#### No devices found on Android\n\nOn Android, the `initialize` call requests the location permission. However, if location services are disable on the OS level, the app will not find any devices. You can check if the location is enabled and open the settings when not.\n\n```typescript\nasync function initialize() {\n  // Check if location is enabled\n  if (Capacitor.getPlatform() === 'android') {\n    const isLocationEnabled = await BleClient.isLocationEnabled();\n    if (!isLocationEnabled) {\n      await BleClient.openLocationSettings();\n    }\n  }\n  await BleClient.initialize();\n}\n```\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/pwespi\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/24232962?v=4?s=100\" width=\"100px;\" alt=\"pwespi\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003epwespi\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=pwespi\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=pwespi\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://twitter.com/dennisameling\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/17739158?v=4?s=100\" width=\"100px;\" alt=\"Dennis Ameling\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDennis Ameling\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=dennisameling\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://squio.nl\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/169410?v=4?s=100\" width=\"100px;\" alt=\"Johannes la Poutre\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJohannes la Poutre\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=squio\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=squio\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/sultanmyrza\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/12681781?v=4?s=100\" width=\"100px;\" alt=\"Kasymbekov Sultanmyrza\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKasymbekov Sultanmyrza\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=sultanmyrza\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://sourcya.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/9040320?v=4?s=100\" width=\"100px;\" alt=\"Mutasim Issa\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMutasim Issa\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=mutasimissa\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://www.gnucoop.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1615301?v=4?s=100\" width=\"100px;\" alt=\"Marco Marche\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMarco Marche\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=trik\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/JFKakaJFK\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/13108477?v=4?s=100\" width=\"100px;\" alt=\"Johannes Koch\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJohannes Koch\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=JFKakaJFK\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/jrobeson\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/56908?v=4?s=100\" width=\"100px;\" alt=\"Johnny Robeson\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJohnny Robeson\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=jrobeson\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/aadito123\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/63646058?v=4?s=100\" width=\"100px;\" alt=\"Aadit Olkar\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAadit Olkar\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=aadito123\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/y3nd\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/18102153?v=4?s=100\" width=\"100px;\" alt=\"Yoann N.\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eYoann N.\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=y3nd\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Andy3189\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2084016?v=4?s=100\" width=\"100px;\" alt=\"Andy3189\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAndy3189\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=Andy3189\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/RFM69CW\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/20404734?v=4?s=100\" width=\"100px;\" alt=\"Sammy\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSammy\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=RFM69CW\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/td-tomasz-joniec\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/109506928?v=4?s=100\" width=\"100px;\" alt=\"td-tomasz-joniec\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003etd-tomasz-joniec\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=td-tomasz-joniec\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://fanxj.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/10436013?v=4?s=100\" width=\"100px;\" alt=\"Michele Ferrari\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMichele Ferrari\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=micheleypf\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/mchl18\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/6136970?v=4?s=100\" width=\"100px;\" alt=\"mchl18\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003emchl18\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=mchl18\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/OpenSrcerer\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/46500918?v=4?s=100\" width=\"100px;\" alt=\"Daniel Stefani\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDaniel Stefani\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=OpenSrcerer\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/lhd-biosency\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/71714070?v=4?s=100\" width=\"100px;\" alt=\"Laurent\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLaurent\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=lhd-biosency\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/peitschie\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1052079?v=4?s=100\" width=\"100px;\" alt=\"Philip Peitsch\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePhilip Peitsch\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=peitschie\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#question-peitschie\" title=\"Answering Questions\"\u003e💬\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/NaterGator\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2575?v=4?s=100\" width=\"100px;\" alt=\"Nate Weibley\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNate Weibley\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=NaterGator\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://www.enesi.it\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2611534?v=4?s=100\" width=\"100px;\" alt=\"Emanuele Toffolon\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eEmanuele Toffolon\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/capacitor-community/bluetooth-le/commits?author=emanueletoffolon\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcapacitor-community%2Fbluetooth-le","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcapacitor-community%2Fbluetooth-le","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcapacitor-community%2Fbluetooth-le/lists"}