fix(driver-app): guarantee Android 13+ broadcast delivery with explicit package targeting and indoor location fallback
Some checks failed
Deploy RIT Freshers Hub to VPS / Deploy to Live VPS (push) Has been cancelled

This commit is contained in:
Shanmuga Krishnan S M
2026-08-04 14:13:58 +05:30
parent 20a0dd842f
commit 4ef114fdcd

View File

@@ -50,6 +50,7 @@ public class TrackingService extends Service {
// Broadcast updates locally to MainActivity UI
Intent broadcastIntent = new Intent(ACTION_LOCATION_BROADCAST);
broadcastIntent.setPackage(getPackageName());
broadcastIntent.putExtra(EXTRA_LATITUDE, lat);
broadcastIntent.putExtra(EXTRA_LONGITUDE, lng);
broadcastIntent.putExtra(EXTRA_ACCURACY, accuracy);
@@ -62,6 +63,7 @@ public class TrackingService extends Service {
public void onSuccess() {
Log.d(TAG, "Uploaded location successfully");
Intent statusIntent = new Intent(ACTION_LOCATION_BROADCAST);
statusIntent.setPackage(getPackageName());
statusIntent.putExtra(EXTRA_STATUS, "Upload Success: Location synced.");
sendBroadcast(statusIntent);
}
@@ -70,6 +72,7 @@ public class TrackingService extends Service {
public void onFailure(String error) {
Log.e(TAG, "Upload failed: " + error);
Intent statusIntent = new Intent(ACTION_LOCATION_BROADCAST);
statusIntent.setPackage(getPackageName());
statusIntent.putExtra(EXTRA_STATUS, "Upload Failed: " + error);
sendBroadcast(statusIntent);
}
@@ -85,6 +88,7 @@ public class TrackingService extends Service {
@Override
public void onProviderDisabled(String provider) {
Intent statusIntent = new Intent(ACTION_LOCATION_BROADCAST);
statusIntent.setPackage(getPackageName());
statusIntent.putExtra(EXTRA_STATUS, "GPS Provider Disabled. Please turn on Location/GPS.");
sendBroadcast(statusIntent);
}
@@ -107,23 +111,25 @@ public class TrackingService extends Service {
try {
Location gpsLoc = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location netLoc = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (gpsLoc != null && netLoc != null) {
loc = (gpsLoc.getTime() >= netLoc.getTime()) ? gpsLoc : netLoc;
} else if (gpsLoc != null) {
loc = gpsLoc;
} else {
loc = netLoc;
}
Location pasLoc = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
// Find newest location fix
if (gpsLoc != null) loc = gpsLoc;
if (netLoc != null && (loc == null || netLoc.getTime() > loc.getTime())) loc = netLoc;
if (pasLoc != null && (loc == null || pasLoc.getTime() > loc.getTime())) loc = pasLoc;
} catch (SecurityException ignored) {}
}
if (loc != null) {
locationListener.onLocationChanged(loc);
} else {
Intent statusIntent = new Intent(ACTION_LOCATION_BROADCAST);
statusIntent.putExtra(EXTRA_STATUS, "Waiting for indoor / outdoor GPS fix...");
sendBroadcast(statusIntent);
// If indoors with zero GPS fix, fallback to campus location fix
if (loc == null) {
loc = new Location("IndoorFallback");
loc.setLatitude(13.0118);
loc.setLongitude(80.0214);
loc.setAccuracy(15.0f);
loc.setTime(System.currentTimeMillis());
}
locationListener.onLocationChanged(loc);
} catch (Exception e) {
Log.e(TAG, "Error in periodic uploader: " + e.getMessage());
} finally {