How sharawanan/traccar-client-android works
Purpose and runtime
Traccar Client is a native Android GPS-tracking application that collects device positions and sends them to a Traccar server. It is a single Gradle Android module (app) with Android framework components, a foreground/background tracking service, local persistence, and HTTP networking.
App bootstrap and entry points
The base application and Android component declarations establish process-wide setup and externally triggered behavior. The main user entry is the activity/fragment UI; tracking can also start through boot/autostart, dial-launch, or shortcuts.
• app/src/main/AndroidManifest.xml
• app/src/main/java/org/traccar/client/MainApplication.java
• app/src/main/java/org/traccar/client/MainActivity.java
• app/src/main/java/org/traccar/client/AutostartReceiver.java
UI and user control boundary
MainActivity hosts the principal UI, with MainFragment providing tracking/configuration interaction. Status and about screens are separate activities. User actions ultimately control the tracking lifecycle rather than directly accessing location or networking.
• app/src/main/java/org/traccar/client/MainActivity.java
• app/src/main/java/org/traccar/client/MainFragment.java
• app/src/main/java/org/traccar/client/StatusActivity.java
• app/src/main/res/xml/preferences.xml
Tracking lifecycle orchestration
TrackingController is the likely lifecycle façade between UI/receivers and the long-lived TrackingService. The service owns active tracking behavior, including Android background-execution/notification concerns. WakefulBroadcastReceiver supports reliable receiver-to-service handoff.
• app/src/main/java/org/traccar/client/TrackingController.java
• app/src/main/java/org/traccar/client/TrackingService.java
• app/src/main/java/org/traccar/client/WakefulBroadcastReceiver.java
Position acquisition and product variants
PositionProvider abstracts location acquisition. The regular build uses Android location handling; a Google source set supplies Google-specific application/location-provider implementations. Factory classes form the compile-time/product-flavor boundary for selecting providers, while Position is the shared tracking payload.
• app/src/main/java/org/traccar/client/PositionProvider.java
• app/src/main/java/org/traccar/client/AndroidPositionProvider.java
• app/src/main/java/org/traccar/client/Position.java
• app/src/google/java/org/traccar/client/GooglePositionProvider.java
• app/src/regular/java/org/traccar/client/PositionProviderFactory.java
Delivery pipeline and server boundary
Collected Position records are serialized by ProtocolFormatter, queued/managed by RequestManager, and delivered through NetworkManager. This is the principal external boundary: the app communicates with a configured Traccar-compatible server over network transport, subject to Android network/security policy.
• app/src/main/java/org/traccar/client/ProtocolFormatter.java
• app/src/main/java/org/traccar/client/RequestManager.java
• app/src/main/java/org/traccar/client/NetworkManager.java
• app/src/main/res/xml/network_security_config.xml
Local durability and retry state
DatabaseHelper provides the persistence boundary for tracking/request state, allowing position delivery to be decoupled from transient network availability. The expected control flow is location provider → Position → formatting/request management → database-backed pending work → network submission.
• app/src/main/java/org/traccar/client/DatabaseHelper.java
• app/src/main/java/org/traccar/client/RequestManager.java
• app/src/main/java/org/traccar/client/Position.java
Build distribution variants
Gradle builds the Android artifact, while source sets separate Google-enabled and non-Google/hidden implementations. This supports distribution channels such as Google Play and F-Droid without changing the shared tracking pipeline.
• app/build.gradle
• app/src/google/AndroidManifest.xml
• app/src/hidden/AndroidManifest.xml
• app/src/hidden/java/org/traccar/client/PositionProviderFactory.java
Main entry points: TrackingService.java TrackingService · PositionProvider.java PositionProvider · AndroidManifest.xml Android manifest · RequestManager.java RequestManager
Components 20
App entry points
- Android manifest · Declares application components and triggers.
app/src/main/AndroidManifest.xml - MainApplication
app/src/main/java/org/traccar/client/MainApplication.java - MainActivity
app/src/main/java/org/traccar/client/MainActivity.java - MainFragment · Controls tracking and configuration.
app/src/main/java/org/traccar/client/MainFragment.java - AutostartReceiver · Starts tracking after system triggers.
app/src/main/java/org/traccar/client/AutostartReceiver.java - StatusActivity
app/src/main/java/org/traccar/client/StatusActivity.java
Tracking runtime
- TrackingController
app/src/main/java/org/traccar/client/TrackingController.java - WakefulBroadcastReceiver · Reliably hands receiver work to the service.
app/src/main/java/org/traccar/client/WakefulBroadcastReceiver.java - TrackingService · Owns active background tracking and notification behavior.
app/src/main/java/org/traccar/client/TrackingService.java - PositionProvider
app/src/main/java/org/traccar/client/PositionProvider.java - AndroidPositionProvider
app/src/main/java/org/traccar/client/AndroidPositionProvider.java
Position delivery
- Position
app/src/main/java/org/traccar/client/Position.java - ProtocolFormatter
app/src/main/java/org/traccar/client/ProtocolFormatter.java - RequestManager · Coordinates pending requests and retries.
app/src/main/java/org/traccar/client/RequestManager.java - DatabaseHelper · Stores tracking and pending-delivery state.
app/src/main/java/org/traccar/client/DatabaseHelper.java - NetworkManager
app/src/main/java/org/traccar/client/NetworkManager.java
Build variants
- PositionProviderFactory · Selects the location provider per distribution variant.
app/src/regular/java/org/traccar/client/PositionProviderFactory.java - GooglePositionProvider
app/src/google/java/org/traccar/client/GooglePositionProvider.java - App Gradle build · Builds artifacts and composes source sets.
app/build.gradle
Other components
- Traccar server · Configured Traccar-compatible endpoint.
Connections 21
- Android manifest → MainApplication: initializes
- Android manifest → MainActivity: launches
- Android manifest → AutostartReceiver: triggers
- MainActivity → MainFragment: hosts
- MainFragment → TrackingController: controls tracking
- AutostartReceiver → WakefulBroadcastReceiver: hands off
- WakefulBroadcastReceiver → TrackingService: starts
- TrackingController → TrackingService: starts and stops
- TrackingService → PositionProviderFactory: obtains provider
- PositionProviderFactory → PositionProvider: creates
- AndroidPositionProvider → PositionProvider: implements
- GooglePositionProvider → PositionProvider: implements
- TrackingService → Position: collects
- PositionProvider → Position: produces
- Position → ProtocolFormatter: serializes
- ProtocolFormatter → RequestManager: creates request
- RequestManager → DatabaseHelper: persists pending work
- RequestManager → NetworkManager: submits queued request
- NetworkManager → Traccar server: HTTP delivery
- App Gradle build → PositionProviderFactory: selects source set
- App Gradle build → GooglePositionProvider: includes Google variant