493: Undecipherable

-Blog-

-Projects-

-About me-

-RSS-

GPS time rollover compensation for broken devices

Dennis Guse

Every 19.7 years aka every 1024 weeks the week counter in GPS transmission has an overflow. This is how to apply a fix if the hardware did not got a software update.

    /**
     * 1. Ancient fix for phones that do not set the time in {@link android.location.Location}.
     * 2. Fix for GPS time rollover happening every 19.7 years: https://en.wikipedia.org/wiki/GPS_Week_Number_Rollover
     */
    public static void fixTime(@NonNull Location trackPoint) {
        if (trackPoint.getTime() == 0L) {
            Log.w(TAG, "Time of provided location was 0. Using current time.");
            trackPoint.setTime(System.currentTimeMillis());
            return;
        }

        {
            long timeDiff = Math.abs(trackPoint.getTime() - System.currentTimeMillis());

            if (timeDiff > 1023 * UnitConversions.ONE_WEEK_MS) {
                Log.w(TAG, "GPS week rollover.");
                trackPoint.setTime(trackPoint.getTime() + 1024 * UnitConversions.ONE_WEEK_MS);
            }
        }
    }