From 1b7e725026d5f48b29af9233a448a58e02dffc32 Mon Sep 17 00:00:00 2001 From: Filip Strajnar Date: Sat, 19 Oct 2024 15:24:31 +0200 Subject: [PATCH] Allowing destructive migrations and writing locations to dabase in a new thread. --- .../logmylocation/LocationLoggingService.java | 74 +++++++++++++++++-- 1 file changed, 68 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/proculite/logmylocation/LocationLoggingService.java b/app/src/main/java/com/proculite/logmylocation/LocationLoggingService.java index d89734d..6e91b12 100644 --- a/app/src/main/java/com/proculite/logmylocation/LocationLoggingService.java +++ b/app/src/main/java/com/proculite/logmylocation/LocationLoggingService.java @@ -7,6 +7,7 @@ import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.location.LocationProvider; +import android.os.Build; import android.os.IBinder; import android.util.Log; @@ -34,6 +35,7 @@ public class LocationLoggingService extends Service implements LocationListener LocationDatabase database = Room .databaseBuilder(getApplicationContext(), LocationDatabase.class, "location") + .fallbackToDestructiveMigration() .build(); locationDao = database.locationDao(); @@ -64,12 +66,72 @@ public class LocationLoggingService extends Service implements LocationListener @Override public void onLocationChanged(@NonNull Location location) { - Log.d(TAG, String.format( - "New location. Latitude: %s Longitude: %s Altitude: %s", - location.getLatitude(), - location.getLongitude(), - location.getAltitude()) - ); + new Thread(()->{ + Log.d(TAG, String.format( + "New location. Latitude: %s Longitude: %s Altitude: %s", + location.getLatitude(), + location.getLongitude(), + location.getAltitude()) + ); + + if(locationDao == null) + { + Log.w(TAG, "Location DAO is null, could not write new location."); + return; + } + + LocationEntity locationEntity = new LocationEntity(); + + locationEntity.latitude = location.getLatitude(); + locationEntity.longitude = location.getLongitude(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + locationEntity.isMock = location.isMock(); + } + + if(location.hasAccuracy()) + { + locationEntity.accuracy = location.getAccuracy(); + } + + if(location.hasAltitude()) + { + locationEntity.altitude = location.getAltitude(); + } + + if(location.hasBearing()) + { + locationEntity.bearing = location.getBearing(); + } + + if(location.hasSpeed()) + { + locationEntity.speed = location.getSpeed(); + } + + if(location.hasSpeedAccuracy()) + { + locationEntity.speedAccuracy = location.getSpeedAccuracyMetersPerSecond(); + } + + if(location.hasVerticalAccuracy()) + { + locationEntity.altitudeAccuracy = location.getVerticalAccuracyMeters(); + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + if(location.hasMslAltitude()) + { + locationEntity.mslAltitude = location.getMslAltitudeMeters(); + } + + if(location.hasMslAltitudeAccuracy()) + { + locationEntity.mslAltitudeAccuracy = location.getMslAltitudeAccuracyMeters(); + } + } + + locationDao.insert(locationEntity); + }).start(); } @Override