I’ve been working towards updating the architecture of several Android apps that make heavy use of location services. Specifically, some of them use LocalBroadcastManager, which has been deprecated, to share locations across app components like Services and Activities. Time for something new.

After reviewing numerous resources on 2021-era Android best practices, primarily focused on Android Jetpack, I prototyped a repository-based architecture that leveraged Room and Kotlin Flow. I wrote about the results in this article:

However, after finishing that project I had a nagging feeling that there was a simpler solution, especially for lightweight apps that don’t already include a…

If you’ve worked with raw data from the Android’s Global Navigation Satellite System (GNSS) APIs, you’re probably aware that apps like GPSTest and GnssLogger are capable of logging three types of information:

  1. NMEA data — Contains information about the locations calculated by the GNSS hardware in the industry-standard NMEA 0183 format
  2. Raw GNSS measurements —Contains raw pseudorange and carrier phase information from satellites that you can use to compute your own location
  3. Navigation messages — Contains the information about the GNSS constellations (e.g., almanac, ephemeris, clock offsets) that are needed by the receiver acquire GNSS signals. See EU GSA’s documentation

If you’ve been developing Android apps for a while, you know how much has changed since the early days of Cupcake. If you want a real flashback, check out the first Android demo that Google published to YouTube back in 2007. It shows maps! Notifications! And a web browser!

The first Android demo video from Google

Thankfully, things have gotten a lot better for Android users and developers since then. A relatively recent addition to the Android ecosystem is Jetpack, a set of libraries, tools, and best practices to help developers write less code and develop solid, production-worthy apps.


Recently, I set out to implement a new feature in the GPSTest Android app — crowdsourcing device Global Navigation Satellite System (GNSS) capabilities. You can read more about why and a description of the new feature in this article. I’d suggest reading that article before this one, as it will make a lot more sense. And if you want to see the data from the end result — the GPSTest Database — you can see it here.

In this article, I also wanted to share exactly how I implemented this new feature in case it’s useful to other developers. The…

As the developer of the open-source GPSTest Android app, the most common question I get from users is “can a device do X”? It’s understandable — with device costs often being $500–1000 USD (or more), users want to know what they are getting for their money.

Unfortunately, this isn’t an easy question to answer for many reasons, which I’ll get into shortly. The lack of industry transparency for mobile device Global Navigation Satellite Systems (GNSS) features has become painfully obvious over the last few years when looking at dual-frequency GNSS. I wrote this article in April 2018 looking at the…

The last several versions of Android have turned it into a powerhouse for processing Global Navigation Satellite System (GNSS) data from systems such as Global Positioning System (GPS) and Galileo. Device with Android 7.0 and higher support an official API for pseudorange measurements and navigation messages, which allows developers to calculate positions within apps. Previously, all apps were limited to using positions calculated by the GNSS hardware, which was a black box. The European Union GNSS Agency (GSA) has even produced a how-to manual describing the technical process of using raw measurement data. …

Android devices have longer lifespans than they used to. As the cost of new flagship devices has creeped over $1000 and cellular carriers in the U.S. stopped subsidizing device costs, users are keeping their Android devices longer than before. Devices also get passed down and re-sold from one user to another.

Most hardware on Android devices remains perfectly usable for a number of years. However, an event in mid 2019 caught some users of older Android devices by surprise when their Global Positioning System (GPS) technology suddenly stopped working.

GPS week rollover

To keep time, the U.S. Global Positioning System (GPS) uses a…

As software engineers, nothing bothers us more than duplicating code within a project. For every line of duplicate code, it potentially doubles the effort required for each bug fix, refactor, and enhancement later in the life of the project. You may have heard of the DRY principle — “don’t repeat yourself” — that most engineers try to follow.

Spiderman identifying a *cough* duplicate bug

Duplicating code for nearly identical SDKs

It’s frustrating to encounter situations where code must be slightly different due to dependencies. The first place I encountered this was the Amazon Maps API. …

You’re rushing out the door, hoping you didn’t miss the 8am Route 5 to work.

Should you sprint to your stop? To find out, you ask OneBusAway for help, frantically yelling:

“Alexa, where’s my bus?”

Alexa responds with times for bunch of routes — but not Route 5. Argh 😠!! Your roommate has struck again. They changed the default stop for a night out on the town, and forgot to change it back.

Fear not, brave transit riders — this problem is soon to be one of the past!

Personalized profiles

The OneBusAway skill for Alexa now supports personalized voice profiles…

Sean Barbeau

Improving the world, one byte at a time. @sjbarbeau, https://github.com/barbeau, https://www.linkedin.com/in/seanbarbeau/. I work @CUTRUSF. Posts are my own.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store