Proto
This commit is contained in:
187
app/src/main/java/com/example/busroute/MainActivity.kt
Normal file
187
app/src/main/java/com/example/busroute/MainActivity.kt
Normal 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);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
Reference in New Issue
Block a user