This commit is contained in:
TiclemFR
2024-06-21 21:09:45 +02:00
commit c1f4a63186
48 changed files with 1207 additions and 0 deletions

View File

@@ -0,0 +1,187 @@
package com.example.busroute
import android.annotation.SuppressLint
import android.content.Context
import android.content.pm.PackageManager
import android.location.Location
import android.location.LocationManager
import android.os.Bundle
import android.os.Looper
import android.preference.PreferenceManager
import android.util.Log
import android.view.WindowManager
import android.widget.Button
import androidx.activity.ComponentActivity
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import com.google.android.gms.location.FusedLocationProviderClient
import com.google.android.gms.location.LocationCallback
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.config.Configuration.getInstance
import org.osmdroid.tileprovider.tilesource.TileSourceFactory
import org.osmdroid.util.GeoPoint
import org.osmdroid.views.MapView
import org.osmdroid.views.overlay.Marker
import org.osmdroid.views.overlay.compass.CompassOverlay
import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider
import org.osmdroid.views.overlay.gestures.RotationGestureOverlay
class MainActivity : ComponentActivity() {
private val REQUEST_PERMISSIONS_REQUEST_CODE = 1
private lateinit var map : MapView
private lateinit var fusedLocationClient: FusedLocationProviderClient
private lateinit var currentLocation: Location
lateinit var locationManager: LocationManager
private lateinit var mapController: IMapController
private lateinit var locationByGps: Location
private lateinit var locationByNetwork: Location
private lateinit var positionMarker: Marker
private lateinit var locationCallback: LocationCallback
private lateinit var locationRequest: LocationRequest
private var latitude = 0.0
private var longitude = 0.0
@SuppressLint("MissingPermission")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
getInstance().load(this, PreferenceManager.getDefaultSharedPreferences(this))
setContentView(R.layout.main)
map = findViewById<MapView>(R.id.map)
map.setTileSource(TileSourceFactory.MAPNIK)
positionMarker = Marker(map)
mapController = map.controller
mapController.setZoom(18.0)
val addMarkButton = findViewById<Button>(R.id.addMark)
addMarkButton.setOnClickListener{
val marker = Marker(map)
marker.position = GeoPoint(latitude, longitude)
marker.title = "MARK BUTTON !!"
marker.icon = ContextCompat.getDrawable(this, org.osmdroid.library.R.drawable.moreinfo_arrow)
map.overlays.add(marker)
map.invalidate()
}
val rotationGestureOverlay = RotationGestureOverlay(map)
rotationGestureOverlay.isEnabled
map.setMultiTouchControls(true)
map.overlays.add(rotationGestureOverlay)
val compassOverlay = CompassOverlay(this, InternalCompassOrientationProvider(this), map)
compassOverlay.enableCompass()
map.overlays.add(compassOverlay)
isLocationPermissionGranted()
val locationClient = LocationServices.getFusedLocationProviderClient(this)
locationRequest = LocationRequest.Builder(Priority.PRIORITY_BALANCED_POWER_ACCURACY,60)
.setWaitForAccurateLocation(true).setMaxUpdateAgeMillis(30).build()
locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
locationResult ?: return
for (location in locationResult.locations){
latitude = location.latitude
longitude = location.longitude
mapController.animateTo(GeoPoint(latitude, longitude))
positionMarker.position = GeoPoint(latitude, longitude)
positionMarker.title = "You"
map.overlays.add(positionMarker)
map.invalidate()
Log.i("Position", "$latitude $longitude")
Log.i("Accuracy Global", "GPS: ${location.accuracy} Network: ${location.accuracy}")
Log.i("Accuracy Chosen", "${location.accuracy}")
}
}
}
locationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper())
}
private fun isLocationPermissionGranted(): Boolean {
return if (ActivityCompat.checkSelfPermission(
this,
android.Manifest.permission.ACCESS_COARSE_LOCATION
) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
this,
android.Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(
this,
arrayOf(
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.ACCESS_COARSE_LOCATION
),
1
)
false
} else {
true
}
}
override fun onResume() {
super.onResume()
//this will refresh the osmdroid configuration on resuming.
//if you make changes to the configuration, use
//SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
//Configuration.getInstance().load(this, PreferenceManager.getDefaultSharedPreferences(this));
map.onResume() //needed for compass, my location overlays, v6.0.0 and up
}
override fun onPause() {
super.onPause()
//this will refresh the osmdroid configuration on resuming.
//if you make changes to the configuration, use
//SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
//Configuration.getInstance().save(this, prefs);
map.onPause() //needed for compass, my location overlays, v6.0.0 and up
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
val permissionsToRequest = ArrayList<String>()
var i = 0
while (i < grantResults.size) {
permissionsToRequest.add(permissions[i])
i++
}
if (permissionsToRequest.size > 0) {
ActivityCompat.requestPermissions(
this,
permissionsToRequest.toTypedArray(),
REQUEST_PERMISSIONS_REQUEST_CODE)
}
}
/*private fun requestPermissionsIfNecessary(String[] permissions) {
val permissionsToRequest = ArrayList<String>();
permissions.forEach { permission ->
if (ContextCompat.checkSelfPermission(this, permission)
!= PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
permissionsToRequest.add(permission);
}
}
if (permissionsToRequest.size() > 0) {
ActivityCompat.requestPermissions(
this,
permissionsToRequest.toArray(new String[0]),
REQUEST_PERMISSIONS_REQUEST_CODE);
}
}*/
}