Tower: a navigation tool

Tower is a navigation program for OS Android for finding user location (by phone cell or GPS),
viewing online maps, creating and storing waypoints and tracks, with minimal permissions and no background activity


How to use it

Currently, the following map services are available (choose it on the SETTINGS page):

The map position is set in three ways:

Map data is downloaded from the network connection (4G, 3G, GPRS-EDGE). There's no offline caching, except for a small native cache of WebView. A waypoint layer is visible even when network is unavailable, there's also a "blank map" option, that displays only waypoints.

Resolving of cell data to coordinates is done with free web services, currently available are (choose it on the SETTINGS page):

Sometimes cell-to-coords services show only very general location, are slow or even fail completely, especialy with the 3G connection type or on unstable network. On the light side, urban 4G connections are usually resolved very rapidly with 100-300m precision. This program displays cell data ( MCC - coutry code, MNC - operator code, LAC - region number, CID - cell number) and allows to store them even if coords are missing.

GPS may also be slow or fail, depending on your device and environmental conditions. For example, a cold GPS startup with no internet access in a half-closed area (like inside a car) may take 5-10 min.

A new waypoint is created on the ADD page by one of the four ways:

The waypoint is always given a number by the program, and the user may enter a short name (also called comment). The number and comment are shown on a map next to the waypoint mark (the mark size is unrelated to accuracy). Marks on the map are not clickable, to pick up a point use the POINT command or click on the appropriate line on the LIST page. For the gps points usually an altitude and range values are displayed on a POINT page, for the cell points - range (given by a resolver service) and cell id. Also a longer description may be entered/edited, that is stored with the point data but not shown on a map.

The program finds a location only by an explicit user's command (CELL, GPS, ADD-Get). There's no automatic location update, so this implementation cannot write tracks. No background activity is very good for the battery :)

A waypoint list is a ring buffer, max number of points is set on the SETTINGS page. From that limit, creating a new point causes removal of the oldest stored point; more precisely, the oldest unprotected point, as any waypoint may be marked as protected. If all remaining points are protected, addition is blocked. The user has to unprotect or/and manually delete some points ( LIST - choose point - Toggle protect, Delete ) or increase the limit. There's a command LIST - Delete all to clear the list and reset numbering.

There's a clever option "save removed points to trash.csv" (in SETTINGS). If it's on, the trash file will be created in the program's data folder on a vitrual card, that contains the default list file current.csv (somewhere like /sdcard/Android/data/truewatcher.tower/files/current.csv), both have the same trivial format and may be retrieved or edited manually.

Any point may be chosen as a base for measuring distances, which are presented in the point list together with numbers and names. A stored waypoint may be chosen via LIST - choose point - As center, a new point - by checking As center on the ADD page. When a location is determined by cell/GPS, the location point is automatically set as center, even if it's not a stored waypoint. The point list may be sorted by those distances: LIST - By proximity.

There's also a page LIST-FILE with a few point list file commands:

Commands LIST-FILE-Open and New work only with csv files, created by this app. Its field structure is trivial and data may be easily edited manually in Notepad. Other commands work also with the GPX format, that is compatible with Garmin navigators, OziExplorer, GPS visualiser and a variety of GPX editors. Open and Load both check the expected point count and give an error if it exceeds the current limit. View track reads CSV/GPX tracks and displays them along with the current map and waypoints; there are no special commands to move the map to a loaded track, nor to dismiss it; all viewed tracks are cleared on the app shutdown. There's no explicit limit on number of trackpoints or track segments; the involved javascript code is quite advanced and can handle tens of track segments with thousands of trackpoints.

Since v2.6 the app is capable of writing tracks by means of a foreground service. To start a track, open the TRACK screen and press Start or Start new segment, a notification must show up; to stop writing, press Stop. While writing a track, keep the app window (any of app's screens) maximized on top; if you minimize it, or run another app over it (or, say, get a SMS), the system may suddenly stop the process after 1-2 minutes (at least on some phones). Shutting the screen by the POWER key is tolerated. The tracking service does not run at startup, nor survives a reboot. There are settings to adjust (1) minimal distance between trackpoints (recommended value is 1.5..2 times of typical GPS accuracy of your device, default 12m), and (2) minimal point interval in seconds (default 10s). By default, the map is auto centered on each new trackpoint, there's a switch setting for that behaviour. You can also completely hide the current track from the map (and thus probably save some energy while writing it). Trackpoints are immediately stored in the currentTrack.csv file. The current track may be exported as GPX file by the LIST-Export track command. There's also a useful command TRACK-Delete last segment.

Summary of page navigation commands:

External materials and API keys

This distribution includes the LeafletJS javacsript library code ver. 1.3.4 (, which has BSD 2-Clause "Simplified" License

This program uses several web APIs and loads data and javascript code, details and references are included in the LICENSES file with the source code.

Some services (currently Yandex Maps and Yandex Locator), despite being free of charge, require access keys. As these keys are not to be committed to public repositories, this app may appear in two kinds of distributions: full (with keys included in the binary) and pure open (without keys).

The keyless distribution is fully operational, except for concerned services, and always has slots to enter user's own keys (on the SETTINGS page; if there's nothing of the kind, that's a full distro). The API keys should be obtainable from and respectively.

Get it

This program is free software under GNU GPL 3.0 or later license, distributed as it is, without any warranty.

It does not contain ads, paid offers, statistics/tracking modules, or other malware.

Download APK (full distribution)
The latest release version: 2.6.12, April 2020, 1.19MB
md5 1c2a5f3ff5cf1e31a0a6ab2b91511405
sha256 79c3fd8a071f879386c1f57f50f6e58527f973d3c537ab545058944d4e4334f5

Same distribution is available from IzzyOnDroid F-Droid Repository

Github: source code, issues


Email to