Add another way to get location

This commit is contained in:
TiclemFR
2024-07-04 10:06:38 +02:00
parent 367be18e85
commit 0b288973ca

View File

@@ -9,13 +9,11 @@ import android.location.Location
import android.location.LocationManager import android.location.LocationManager
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.os.Looper
import android.preference.PreferenceManager import android.preference.PreferenceManager
import android.provider.BaseColumns import android.provider.BaseColumns
import android.util.Log import android.util.Log
import android.view.WindowManager import android.view.WindowManager
import android.widget.Button import android.widget.Button
import android.widget.TextView
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
@@ -23,9 +21,6 @@ import com.example.busroute.Database.DbHelper
import com.example.busroute.Database.StopContract import com.example.busroute.Database.StopContract
import com.google.android.gms.location.LocationCallback import com.google.android.gms.location.LocationCallback
import com.google.android.gms.location.LocationRequest import com.google.android.gms.location.LocationRequest
import com.google.android.gms.location.LocationResult
import com.google.android.gms.location.LocationServices
import com.google.android.gms.location.Priority
import org.osmdroid.api.IMapController import org.osmdroid.api.IMapController
import org.osmdroid.config.Configuration.getInstance import org.osmdroid.config.Configuration.getInstance
import org.osmdroid.tileprovider.tilesource.TileSourceFactory import org.osmdroid.tileprovider.tilesource.TileSourceFactory
@@ -35,6 +30,8 @@ import org.osmdroid.views.overlay.Marker
import org.osmdroid.views.overlay.compass.CompassOverlay import org.osmdroid.views.overlay.compass.CompassOverlay
import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider
import org.osmdroid.views.overlay.gestures.RotationGestureOverlay import org.osmdroid.views.overlay.gestures.RotationGestureOverlay
import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay
class MainActivity : ComponentActivity() { class MainActivity : ComponentActivity() {
@@ -143,45 +140,49 @@ class MainActivity : ComponentActivity() {
val compassOverlay = CompassOverlay(this, InternalCompassOrientationProvider(this), map) val compassOverlay = CompassOverlay(this, InternalCompassOrientationProvider(this), map)
compassOverlay.enableCompass() compassOverlay.enableCompass()
map.overlays.add(compassOverlay) map.overlays.add(compassOverlay)
val mLocationOverlay = MyLocationNewOverlay(GpsMyLocationProvider(this), this.map)
mLocationOverlay.enableMyLocation()
mLocationOverlay.enableFollowLocation()
map.overlays.add(mLocationOverlay)
isLocationPermissionGranted() isLocationPermissionGranted()
val locationClient = LocationServices.getFusedLocationProviderClient(this) // val locationClient = LocationServices.getFusedLocationProviderClient(this)
//
locationRequest = LocationRequest.Builder(Priority.PRIORITY_BALANCED_POWER_ACCURACY,60) // locationRequest = LocationRequest.Builder(Priority.PRIORITY_BALANCED_POWER_ACCURACY,60)
.setWaitForAccurateLocation(true).setMaxUpdateAgeMillis(30).build() // .setWaitForAccurateLocation(true).setMaxUpdateAgeMillis(30).build()
locationCallback = object : LocationCallback() { // locationCallback = object : LocationCallback() {
@SuppressLint("SetTextI18n") // @SuppressLint("SetTextI18n")
override fun onLocationResult(locationResult: LocationResult) { // override fun onLocationResult(locationResult: LocationResult) {
locationResult ?: return // locationResult ?: return
for (location in locationResult.locations){ // for (location in locationResult.locations){
if(location.accuracy < 60){ // if(location.accuracy < 60){
if(location.provider == LocationManager.NETWORK_PROVIDER){ // if(location.provider == LocationManager.NETWORK_PROVIDER){
location.provider = LocationManager.GPS_PROVIDER // location.provider = LocationManager.GPS_PROVIDER
}else{ // }else{
location.provider = LocationManager.NETWORK_PROVIDER // location.provider = LocationManager.NETWORK_PROVIDER
} // }
} // }
currentLocation = location // currentLocation = location
latitude = location.latitude // latitude = location.latitude
longitude = location.longitude // longitude = location.longitude
mapController.animateTo(GeoPoint(latitude, longitude)) // mapController.animateTo(GeoPoint(latitude, longitude))
//
positionMarker.position = GeoPoint(latitude, longitude) // positionMarker.position = GeoPoint(latitude, longitude)
positionMarker.title = "You" // positionMarker.title = "You"
map.overlays.add(positionMarker) // map.overlays.add(positionMarker)
map.invalidate() // map.invalidate()
//
findViewById<TextView>(R.id.accuracy).text = "${location.accuracy} %" // findViewById<TextView>(R.id.accuracy).text = "${location.accuracy} %"
findViewById<TextView>(R.id.position).text = "$latitude $longitude" // findViewById<TextView>(R.id.position).text = "$latitude $longitude"
findViewById<TextView>(R.id.speed).text = "${location.speed} m/s" // findViewById<TextView>(R.id.speed).text = "${location.speed} m/s"
findViewById<TextView>(R.id.speed_accuracy).text = "${location.speedAccuracyMetersPerSecond} %" // findViewById<TextView>(R.id.speed_accuracy).text = "${location.speedAccuracyMetersPerSecond} %"
//
Log.i("Position", "$latitude $longitude") // Log.i("Position", "$latitude $longitude")
Log.i("Accuracy Chosen", "${location.accuracy}") // Log.i("Accuracy Chosen", "${location.accuracy}")
} // }
} // }
} // }
locationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper()) // locationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper())
} }
private fun isLocationPermissionGranted(): Boolean { private fun isLocationPermissionGranted(): Boolean {