The following is the first few sections of a chapter from The Busy Coder's Guide to Android Development, plus headings for the remaining major sections, to give you an idea about the content of the chapter.

Basic Bluetooth RFCOMM

For short-range communications, Bluetooth is fairly popular. It is widespread, available on mobile devices, notebooks, and many Internet of Things platforms. It performs reasonably well, at least for moderate amounts of data. Android has a variety of classes in the Android SDK for adding Bluetooth communications to an app.

However, Bluetooth overall is a vast topic. The documentation for the Android SDK classes is spotty. And it can be fairly difficult to make sense of how all the different pieces are supposed to plug in together.

In this chapter, we will explore a sample app that demonstrates Bluetooth communications between two Android devices and use that to see how to work with Bluetooth on Android. For extra fun, we will also peek a bit at how things differ when you try to use Bluetooth on an Android Things device, such as a Raspberry Pi.


This chapter makes use of RxJava, foreground services, RecyclerView, and data binding.

If you want to run the sample app, you will need two Android 5.0+ devices, each with working Bluetooth.

A Quick Bit of Scope

As mentioned, Bluetooth is vast, much more than can be covered in a single chapter.

This chapter will focus on Bluetooth, not Bluetooth Low Energy (BLE). When most people think of Bluetooth, they are thinking of “full” Bluetooth. BLE is designed for low-power environments and lower data throughput.

This chapter will focus on RFCOMM. Bluetooth is based around “profiles”, which describe particular standards of data exchange between parties. If you think of Bluetooth as being HTTPS, a Bluetooth profile is a particular Web service API. RFCOMM is a general-purpose mechanism designed for communications that fall outside any standard profile.

And, this chapter will focus on one particular recipe for using Bluetooth. As with many of the book examples, the code shown here is not bulletproof, but is here to illustrate the use of various APIs and concepts. A production-grade app will need to handle concerns that lie outside the scope of the chapter, such as:

About the Sample App

The preview of this section is in an invisible, microscopic font.

Bluetooth and Permissions

The preview of this section was traded for a bag of magic beans.

The Rx for Your Bluetooth

The preview of this section was abducted by space aliens.

I Can Haz Bluetooth?

The preview of this section left for Hollywood to appear in a reality TV show.

I Feel a Bond Between Us

The preview of this section apparently resembled a Pokémon.

A Voyage of Discovery

The preview of this section is in the process of being translated from its native Klingon.

Serving and Shouting

The preview of this section was last seen in the Bermuda Triangle.

Reach Out and Touch Someone

The preview of this section is presently indisposed.

Ping and Pong

The preview of this section left for Hollywood to appear in a reality TV show.

Differences with Android Things

The preview of this section was the victim of a MITM ('Martian in the middle') attack.