Find nearby EV charging points in Singapore with live availability from LTA DataMall.
SG EV Charging (Android) is a native Kotlin / Jetpack Compose app for locating electric vehicle charging points around Singapore. It is a feature parity port of the SwiftUI iOS app, combining Google Maps location search, current-location detection, and LTA DataMall EV charging data to show nearby stations, available plugs, operators, charging speeds, and driving directions in Google Maps.
Key features:
- Search by Singapore postal code or place name.
- Detect the user's current location and rank charging points by distance.
- Display available, occupied, and unavailable connector states.
- Show operator, plug type, power rating, and last-updated metadata.
- Open turn-by-turn directions in Google Maps.
- Map-first interface with nearby charging chips for quick station switching.
- Bottom navigation with Map, Feedback (send a message via WhatsApp), and About tabs.
- In-app attribution linking the official LTA DataMall government data source.
| Layer | Technology |
|---|---|
| App | Kotlin 2.0, Jetpack Compose, Material 3 |
| Maps & Location | Google Maps Compose, Fused Location Provider, platform Geocoder |
| Data | LTA DataMall EVChargingPoints and EVCBatch APIs (OkHttp + org.json) |
| Build | Android Gradle Plugin 8.7, Gradle 8.11, JDK 17 |
| Platform | Android 7.0+ (minSdk 24, target/compileSdk 35), phones |
SG EV Charging (Android)
├── Compose UI
│ ├── SGEVChargingScreen (map + search + result card + chips)
│ └── ui/theme/Theme.kt
├── State
│ └── ChargingSearchViewModel (AndroidViewModel)
├── Location
│ ├── UserLocationProvider (FusedLocationProviderClient)
│ └── LocationSearchService (Geocoder)
├── Data Access
│ └── LTADataMallClient (OkHttp)
└── Models
├── EVChargingLocation
├── ChargingPoint
├── PlugType
└── EVConnector
.
├── app
│ ├── src/main
│ │ ├── java/com/alfredang/sgevcharging
│ │ │ ├── MainActivity.kt
│ │ │ ├── SGEVChargingApp.kt
│ │ │ ├── ChargingSearchViewModel.kt
│ │ │ ├── data/Models.kt
│ │ │ ├── data/LTADataMallClient.kt
│ │ │ ├── location/UserLocationProvider.kt
│ │ │ ├── location/LocationSearchService.kt
│ │ │ └── ui/SGEVChargingScreen.kt
│ │ ├── res
│ │ └── AndroidManifest.xml
│ └── build.gradle.kts
├── gradle/libs.versions.toml
├── settings.gradle.kts
└── README.md
- Android Studio Ladybug (or newer) with JDK 17.
- Android SDK Platform 35 and build-tools.
- A Google Maps Android SDK API key — https://console.cloud.google.com/google/maps-apis.
- An LTA DataMall account key — https://datamall.lta.gov.sg/.
-
Clone the repository:
git clone https://github.com/alfredang/sgevchargingapp_android.git cd sgevchargingapp_android -
Add your keys to
local.properties(this file is git-ignored):sdk.dir=/path/to/Android/sdk MAPS_API_KEY=your_google_maps_android_key LTA_DATAMALL_ACCOUNT_KEY=your_lta_datamall_key
MAPS_API_KEYis injected into the manifest meta-data;LTA_DATAMALL_ACCOUNT_KEYis surfaced asBuildConfig.LTA_DATAMALL_ACCOUNT_KEY. -
Build and run:
./gradlew :app:assembleDebug # debug APK ./gradlew :app:bundleRelease # signed release AAB (needs RELEASE_* keys)
The app uses Singapore Land Transport Authority DataMall APIs:
EVChargingPointsfor postal-code scoped charging data.EVCBatchfor island-wide batch data (returns a download link to the full dataset).
API credentials are intentionally excluded from Git. local.properties is ignored by .gitignore.
No license has been specified yet.
Tertiary Infotech Academy Pte. Ltd.

