The Bluetooth experience on Android has always been a rocky road. For the first few years Android relied on BlueZ, a "protocol stack" originally developed by Qualcomm for the Linux operating system. Despite many limitations and missing features, BlueZ served admirably until Android 4.2 launched with a new stack dubbed Bluedroid, a project built jointly by Google and Broadcom. Like any young project, the bugs were plentiful, but most of the critical issues were solved in the first few weeks. Unfortunately, several problems remain and a few have seemingly reappeared with KitKat.

1148-38795-s6o6DG7F4zEWJyD-upload

The introduction of Bluedroid was intended to ease many of the challenges associated with adding new features on top of the existing BlueZ architecture. So far, this has generally been successful as Android 4.3 brought new capabilities like AVRCP 1.3 and Bluetooth Low Energy while 4.4 continued the momentum with a few new profiles of its own.

All of this activity in the codebase has produced a few serious bugs and people are understandably displeased. Since many of the issues and symptoms are probably related, but they aren’t affecting everybody in the same ways, I’m going to bundle the complaints and workarounds in a single post.

Symptoms

There are a lot of reports for various abnormal behaviors, some of them first appeared with KitKat, but many have been around a bit longer. Some people are experiencing just one of these issues while others may be suffering from nearly all of them.

Inconsistent or Maximum Volume - For some people the volume to Bluetooth speakers or headsets is automatically maxed out and can’t be turned down. In other cases, as it was for me, the response to changing volume is delayed by a few seconds and operates in reverse (holding vol.up decreases volume, and vice versa). This symptom appears to be moderately common, and definitely poses a problem if it occurs during phone calls.

Bad Audio Quality - Headsets and speakers may not come through very clearly, have a scratchy noise, or even produce echoing. Reports of this are fairly rare and seem to occur mostly during calls.

Unresponsive Playback and Call Controls - The basic button controls on many modern accessories can be completely ineffective for actually doing anything with them. This appears to be fairly uncommon, but it’s showing up mostly with Bluetooth headphones and speakers.

Frequently Dropped Connections - A paired accessory may be operating normally and suddenly disconnect. The connection is usually restored a few seconds later, but it will usually repeat this behavior again. This also appears to be a common issue, so much so that it was the primary topic for two threads on the Google Product Forums and one in the AOSP Issue Tracker. In fact, it was the original focus of this Bug Watch until it became clear how many issues are present.

Pairing Failures - Sometimes new devices will refuse to pair or the pairing will error out. This appears to be rare and most people can work around it with a restart, but most people with this problem usually also have frequently dropped connections once they get something paired.

Crashing Bluetooth Service - This is exactly what it sounds like: the Bluetooth service crashes. Annoyingly, it can't be restarted without completely rebooting the device. This doesn't seem to be very common

What Is Affected?

It seems Bluetooth problems are present in the full range of devices and no type of accessory is immune to the effect. From speakers to headsets to heart rate monitors, no gadget is safe. Hands-free car kits and headsets are the most heavily represented, as are Bluetooth speakers, but people are also reporting trouble with items like the Pebble Smartwatch and laptop computers.

As for devices and Android itself, the Nexus 4, Nexus 5, and 2013 Nexus 7 are the most commonly named devices. Some of these issues were reported as early as Android 4.2, but all of them were present in version 4.4 KitKat. Some people say that their problems cleared up with the 4.4.1 update, but plenty of people are still describing these symptoms up through 4.4.2.

Possible Causes

Since this is more of a roundup of complaints, unlike the typical Bug Watch, there are almost certainly a few troublemakers. As I’ve already said, some of the blame must surely belong on Bluedroid due to the sheer number of changes it has gone through during its short life. However, the odds are pretty good that the new software stack may not be the only contributor to our Bluetooth issues, so I should mention a few other possibilities.

To begin with, the complaints are heavily weighted towards three specific devices and they happen to share a common trait: they are the only devices in the Nexus lineup with Qualcomm chipsets. This may point to a problem with the Bluetooth drivers distributed by Qualcomm. The firmware could easily be responsible for all of the aforementioned issues if it’s poorly calibrated or doesn’t properly filter out environmental noise.

A surprising number of people have cleared up a lot of their issues by disabling the 5 GHz Wi-Fi band, or shutting down Wi-Fi altogether. While unusual, this radio may be causing interference for the Bluetooth radio. I could make guesses as to how this would happen, but I’m not an expert in this area, so I’ll leave that for somebody with more experience.

Last in the list of likely factors is the code responsible for power management. A few people have identified their problems usually start around the same time their screens turn off due to inactivity. Perhaps a switch in power state is disrupting Bluedroid, resulting in trouble maintaining connections.

Workarounds

There are no clear and definite solutions for any of the reported issues, but quite a few people have been able to either significantly reduce or eliminate some issues by making certain changes. For every solution that has been posted, at least a couple of people have confirmed it didn’t work for them, so your mileage may definitely vary with these.

To begin with, just as a sanity check, try manually unpairing your Bluetooth devices, restart the device, and set up the pairings again. You can unpair devices in Settings -> Bluetooth -> settings button for a device -> Unpair. This is the safest and least destructive option and it may clear up corruptions caused by an upgrade or restoring your pairings from backup applications.

Screenshot_2013-12-27-16-39-51Screenshot_2013-12-27-16-40-52Screenshot_2013-12-27-16-41-39

If your issues are possibly caused by a power state change, it might be worth experimenting with the inactivity timeout. Simply go to Settings -> Display -> Sleep and set a fairly lengthy timespan. Just remember to keep a close eye on your battery. If this turns out to be a fix for you, it might be worth setting up a Tasker profile (or other automation tool) to adjust this timeout when Bluetooth is toggled or you are in a call.

Another relatively painless thing to try is disabling the 5 GHz band in your Wi-Fi settings. As I mentioned earlier, quite a few people have cleared up their issues with this trick, so it may be worth a shot. Simply go to Settings -> Wi-Fi -> menu -> Advanced -> Wi-Fi frequency band and set it to 2.4 GHz only. Alternatively, you can shut off Wi-Fi entirely when using Bluetooth, but that probably won’t be a good option for many of you, especially if you mainly use Bluetooth to stream music from the Internet.

Note: The following suggestions are meant for advanced users. If you aren’t comfortable with unlocking and modifying your device’s firmware, do not try these.

As for the Nexus 4 and 2013 Nexus 7, many of these issues didn’t appear until they were updated to KitKat. Since the most recent drivers from Qualcomm can be implicated, it may be possible to stay with KitKat and restore Bluetooth operation by flashing an older kernel. If you have the necessary knowledge, it might be worth experimenting with a custom kernel built from 4.4.2 code and a Bluetooth driver from older releases. Likewise, some people claim they’ve cleared up their issues on the Nexus 4 by flashing older radios from the 4.4 and 4.3 factory images. Obviously, these mix-and-match solutions may not work and could even have very bad side-effects, so experiment with them at your own risk.

Finally, if your issues are severe enough and you simply need working Bluetooth more than you need KitKat, your only fallback may be to downgrade to 4.3 using a factory image. Alternatively, if you have a little time, it might be worth experimenting with custom ROMs in the off-hand chance that some of these bugs may have already been stamped out.

Wrap-Up

There’s no need to panic or run for your pitchforks, these issues still appear to only affect a relative minority of people. Despite testing on numerous devices, the worst I could reproduce with my own hardware was some slightly annoying background static and trouble adjusting the volume (it was possible, but very fiddly). However, the really critical stuff - like frequent disconnections - can be more serious since they may cause distractions for drivers using Bluetooth headsets and car kits.

Frankly, most of these problems shouldn’t exist in a staple feature like Bluetooth. It doesn’t matter if the bugs originated from Google, Broadcom, LG, or Qualcomm; this is the sort of thing that consumers should expect to work correctly. It’s understandable if a few sneaky bugs pop up early in a release cycle, especially with how difficult they can be to discover in testing, but they should be taken more seriously and fixed very quickly. At least some of these symptoms were reported on the Nexus 4 in late July.

Now that Bluedroid is a year old and it has proven its worth as a platform for new features, it’s time to put a priority on making it rock solid.

Sources: AOSP Issue Tracker, Google Product Forums 1, 2, 3