Bluetooth is one of those technologies that seems like a very simple thing from the perspective of a user—you set it up once and forget about it. But in reality, there’s a lot of complexity hidden behind the scenes. As we all know, wherever there’s complexity, there’s more that can potentially go wrong.
Over the years, I’ve spent a great deal of time developing and testing mobile applications that use Bluetooth to pass data to and from custom electronic devices. From that experience, I have compiled a list of test scenarios that can help identify problems related to Bluetooth connectivity and implementation. If you’re developing a new custom device or a new mobile application that uses Bluetooth, the following items would be a great addition to your testing repertoire.
🔲 Test Connection Times after Dropped Connections
The amount of time that your application takes to establish a connection can vary significantly based on many factors. For power saving reasons, some phones will attempt to connect less aggressively after being disconnected for longer periods of time. Use a Faraday bag or other Faraday shield to isolate your device under test and cause a dropped connection. Then, remove the device from the bag and take note of how long the reconnection takes. Try this after leaving your device in the bag for varying amounts of time.
🔲 Test Connection after Rebooting Phone
One of the most surprising problems I’ve encountered on a Bluetooth app was a case where the phone was unable to connect to a device after the phone was restarted. The root cause ended up being related to the fact that we were not using Bluetooth bonding in combination with the type of hardware address that the device utilized. Nevertheless, it’s easy to test, and definitely worthwhile.
🔲 Test Connection with Location Permission Denied
Since Android 6.0, there has been a requirement that users must grant apps permission to use the Location Service in order to scan for Bluetooth devices. This has to do with privacy concerns because Bluetooth beacons can be used to track people’s locations. When pairing to your device, test what happens if the user denies the Location permission. Also, after pairing, try removing the permission and see if a connection can still be established.
🔲 Test Connection with Location Service Turned Off
Similar to the item above, some Android phones may require users to enable the Location Service in addition to granting permission in order for Bluetooth scanning to succeed.
🔲 Test Connectivity Areas of High Bluetooth Traffic
This can be a hard test to reproduce, but try to find a place where a large number of mobile devices are in use, and test your app’s ability to connect there. We’ve seen before that high levels of congestion, such as a crowd at the Las Vegas Consumer Electronics Show, can have a significant impact on connection times.
🔲 Test Connectivity While Using Bluetooth in Other Applications
All Bluetooth communication is going to be transferred via the same Bluetooth radio on your mobile device. That means multiple applications or services will be vying for access to the same hardware peripheral simultaneously. Try connecting other Bluetooth devices to your test phone, stream music, etc., and see if it has any impact on your device’s functionality. You might not be able to do anything about it, but it’s good to at least be aware if it does cause an issue.
🔲 Test a Wide Range of Phones
Over the years, I’ve observed many issues that have been specific to certain smartphone makes and models. Typically, we see this on Android, but there’s always the potential on iOS as well. Find out what the top five or 10 phones are for your user base, and buy one of each of them. Test your app’s performance on each after any making any changes to your app’s Bluetooth functionality.
🔲 Test Various Operating System Versions
Bluetooth functionality at the operating system level has changed over time in both iOS and Android. It seems like just about every time Apple releases a new major version of iOS, it’s shortly followed up a patch release that fixes some sort of Bluetooth problem. Set up test phones with a range of operating systems, and test your device and application with them regularly.
In my opinion, one of the biggest mistakes that you can make as a product developer is to underestimate the amount of additional complexity that comes with adding Bluetooth connectivity to your product. If Bluetooth connectivity is something you need, plan on spending a lot of time testing; the list above is a great place to start. Otherwise, your users will certainly find the problems for you. Also, have a look at my post on successfully developing an application that uses Bluetooth.