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…

I’ve been interested in location services for mobile devices ever since I owned my first phone. I wrote my first location-aware apps on the HP iPAQ H555 (with an external Navman GPS antenna) and the Motorola i860, the first device to support the standardized Java Location API.

The HP iPAQ H5555 with Navman GPS 3450 antenna and the Motorola i860 (Source: USF and Wikipedia)

There have been many changes in the industry since these devices, but one consistent limitation of building apps for consumer-level phones has been the computation of location information in a “black box”. In other words, a mobile app can read the location calculated by the underlying hardware via an Application Programming Interface (API)…

How accurate is your location?

There are a lot of factors that go into choosing a new mobile phone. Typically, location accuracy isn’t the first thing that comes to mind. However, the accuracy of your device’s Global Navigation Satellite System (GNSS) receiver can have a huge impact on your mobile experience. Anyone who has tried to use real-time walking navigation or to find your Uber or Lyft ride in an urban environment can appreciate this as they’ve spun in circles chasing the blue dot on the map.

Remember the Simpsons episode where Homer can’t find his Uber because of poor GNSS accuracy?

Let’s say you want to buy a phone that will give you a…

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