Awesome Open Source
Awesome Open Source

Punch Through Android BLE Starter App

CircleCI build status

Companion Android app project for Punch Through's "Ultimate Guide to Android BLE Development" blog post for beginners, with examples of how to perform basic BLE operations and some Android BLE tips and tricks on the following:

  • Scanning for nearby BLE devices
  • Connecting to BLE devices
  • Discovering services and characteristics
  • Requesting an ATT MTU update
  • Reading and writing data on characteristics and descriptors
  • Enabling and disabling notifications and indications on characteristics
  • Bonding with a BLE device
  • Implementing your own BLE operations serial queuing mechanism


  1. Clone the project to your directory of choice.
git clone
  1. Launch Android Studio and select "Open an existing Android Studio project".
  2. Navigate to the directory where you cloned the project to, and double click on it.
  3. Wait for Gradle sync to complete.


This project targets Android 10 and has a min SDK requirement of 21 (Android 5.0), in line with our recommendation in 4 Tips to Make Android BLE Actually Work.


Reporting bugs

Please open an issue to report a bug if the app isn't behaving as expected.

Opening a Pull Request

Please fork the repository and create a feature branch before opening a Pull Request against the master branch.

Linting and code style

The project uses Kotlin's default coding conventions and includes the .idea/codeStyle directory in source control. The project also runs ktlint as part of the CI process to ensure code consistency.

You may run ktlint locally using the following command:

./gradlew ktlint

Some simpler violations can be automatically formatted by ktlint using the following command:

./gradlew ktlintFormat


This project is licensed under the Apache 2.0. For more details, please see LICENSE.

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
android (6,459
kotlin (3,754
bluetooth-low-energy (90
bluetooth-le (29