The map is almost never the hard part. A bus is live only when two quieter things are true: somebody started the trip, and the phone is still allowed to share its location after the screen goes dark. Miss either one and the app carries on looking exactly the way it looks when everything is fine.
September 22, 2026 5 min read Team EDII Transport · Driver App · Live Tracking
Before a bus can appear on anybody's map, two things have to be true, and neither of them is the map. Somebody has to have started the trip, and the driver's phone has to still be allowed to share its location once the screen has gone dark. Both can fail quietly, which is what makes them worth understanding before you shop for a tracker.
In one line
A bus is not live because it has a tracker. It is live because a trip was started and the phone was allowed to keep sharing. Everything below is about those two facts; EDII Transport is the worked example, not the point.
The thing being tracked is a trip, not a bus
A bus is a vehicle, and it exists all day. Tracking does not attach to the vehicle; it attaches to a journey — one route, run at a particular time, in a particular direction. A route usually produces two of those a day, a pickup and a drop. Everything anyone actually looks at hangs off one of them: the live position, the alerts to parents, the record of who boarded. None of it exists until somebody declares that the journey has begun.
That is why starting the trip is the hinge of the whole system rather than a formality, and also why it is the easiest thing to get wrong. A driver who pulls out of the gate without it is driving an untracked bus, and nothing on the map says so — a bus that has not left yet and a bus nobody is recording look identical. Any system that takes this seriously has to make the trip an explicit object with a beginning and an end: refuse to run two at once on the same route, make ending one a deliberate act rather than a side effect, and give the office some way to notice a trip that should be running and is not.
One trip at a time. The day is a list of cards reading Start Trip, then Resume while it runs, then Completed. A second cannot begin while one is live: "Finish the trip in progress first."
Ending is final. End Trip warns that sharing will stop and says how many children are still unmarked. A trip cannot be restarted for the same route and leg that day.
A second phone can take over. If a bus looks frozen, another driver on the route takes over sharing with one tap.
The day's tripsA trip in progress
The tracker is already in the driver's pocket
A GPS box wired into a bus is one way to report a position. A phone the driver is already carrying is another, and it arrives with a screen, a data connection and a person attached to it. What it does not arrive with is any guarantee that it will keep reporting. An app that samples location has to be allowed to run while it is not on screen, it has to batch what it collects rather than make a network call per fix, and it needs an answer for the stretch of road with no signal at all.
So the part worth understanding is not the satellite fix, which is the easy bit. It is the plumbing around it: how often a position is taken, what happens to positions between uploads, and what the phone does with the ones it could not send. A tracker that samples rarely gives you a map that jumps; one that samples constantly and never batches gives you a flat battery.
The EDII driver app settles that plumbing in its own code — the cadence is fixed in the app, not something a school tunes:
A position roughly every five seconds, uploaded about every fifteen. Points are gathered on a timer and posted in batches, so a moment of weak signal costs one failed upload rather than a hole in the trip.
A bus at a stop still reports, for a while. The phone's location watcher only volunteers a fresh fix once the bus has moved about ten metres, so at a standstill the app keeps sending the last known position on its own clock — but only while that fix is under a minute old. After that it stops repeating it, rather than show the office a bus at a place it may already have left. A long stand therefore goes quiet on the map, which is the honest answer: the last thing anyone needs is a stale position that looks live.
No signal is buffered, not lost. Up to five thousand points are held on the phone and posted once the connection returns. Each catch-up upload is capped, so a long dead stretch drains over the next several uploads rather than in one burst — but it does drain, and the trip's history fills back in.
The permission nobody tells you about
On Android, granting location once is not enough. The permission that matters is the one that lets an app keep sharing while the screen is off, and it sits a level deeper in Settings than the prompt most people tap through. Without it, tracking stops the moment the driver locks the phone, and the bus goes dark for every parent while the app itself still looks fine. It is the failure that is hardest to catch from inside the app, because from inside the app nothing has failed.
There is no engineering around this — the operating system will grant it only if the driver does. What an app can do is ask honestly: say in plain words what is collected and when, before the system prompt appears rather than after; keep a visible notification up for as long as it is sharing; and stop sharing when the trip stops, so the permission is never quietly doing more than the driver agreed to. An app that hides this step gets the permission once and loses the driver's trust the first time they find out.
In EDII Transport the driver sees a notice headed "EDII Transport collects location" ahead of any system prompt, ending: "Sharing starts when you tap Start Trip and stops when you tap End Trip." Once the trip runs, a second prompt asks for Location set to "Allow all the time", and a notification reading "Sharing bus location with your school" stays up for the whole trip.
Shown before the system ever asks
Battery savers on Xiaomi, Oppo, Vivo, Realme and Samsung phones close background apps by default, so the driver app carries a per-brand setup guide.
What the school sees when a bus goes quiet
A bus that has stopped reporting looks exactly like a bus that is fine. The marker stops moving, and a position ten seconds old is drawn no differently from one an hour old. Nobody in the office is watching closely enough to catch that, and the first person who does notice is a parent standing at a stop, who will phone the school rather than the driver.
Which means the office view has to do two things a map cannot do by itself: show the age of what it is showing, and raise its own hand. Something has to check on a clock for trips that have gone silent and for trips that should have started and have not — and it has to surface the awkward cases rather than tidy them away, because a bus reporting a position when no trip is open is information, not clutter.
In EDII Transport:
One map for the whole fleet. The Transport Dashboard refreshes every ten seconds and counts buses live now, active trips and buses reporting. An SOS banner stays until a person acknowledges it.
Watchdogs instead of vigilance. One check runs every five minutes for a live trip that has gone silent; another for a trip that should have started and has not.
Idle buses are shown, not hidden. A bus sending a position outside any trip is drawn on the map with a line admitting it, not dropped to keep the panel tidy.
Parents see the same trip. Their screen refreshes every fifteen seconds and says how many stops away the bus is. With no trip running, it says exactly that.
Transport Dashboard, refreshed every ten seconds
Part of EDII, not a second system
Transport is a group in the same EDII sidebar the office already uses, reading the same classes, sections and students. That is why Bus Fee Reconciliation can list a child with a seat on a route but no bus fee against their name. It is bundled into EDII, the school operating system: no second vendor, no hardware.
See the buses on your own routes
Bring your own routes and stops to a 30-minute demo, and watch a trip run from Start Trip to End Trip.