Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.51 KB | None | 0 0
  1. import android.Manifest
  2. import android.content.Context
  3. import android.content.IntentSender
  4. import android.content.pm.PackageManager
  5. import android.os.Build
  6. import android.os.Looper
  7. import android.util.Log
  8. import androidx.core.app.ActivityCompat
  9. import com.google.android.gms.common.api.ResolvableApiException
  10. import com.google.android.gms.location.*
  11. import com.google.android.gms.tasks.Task
  12. import com.paulik8.maptracker.worker_main.WorkerMainActivity
  13.  
  14.  
  15. class LocationService(private val context: Context) {
  16.  
  17. private val fusedLocationClient = LocationServices.getFusedLocationProviderClient(context)
  18. private var locationCallback: LocationCallback? = null
  19.  
  20. private fun startLocationUpdates() {
  21. initCallback()
  22. val minDelay: Long = 3 * 1000 // testTime
  23. val delay: Long = 5 * 1000 // testTime
  24. val locationRequest = LocationRequest.create()
  25. .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
  26. .setFastestInterval(minDelay)
  27. .setFastestInterval(delay)
  28. val builder = LocationSettingsRequest.Builder()
  29. .addLocationRequest(locationRequest)
  30. val client: SettingsClient = LocationServices.getSettingsClient(context)
  31. val task: Task<LocationSettingsResponse> = client.checkLocationSettings(builder.build())
  32. task.addOnSuccessListener {
  33. locationCallback?.let { callback ->
  34. fusedLocationClient.requestLocationUpdates(locationRequest, callback, Looper.getMainLooper())
  35. }
  36. }
  37. task.addOnFailureListener { exception ->
  38. if (exception is ResolvableApiException){
  39. // Location settings are not satisfied, but this can be fixed
  40. // by showing the user a dialog.
  41. try {
  42. Log.e("locationError", exception.toString())
  43. } catch (sendEx: IntentSender.SendIntentException) {
  44. // Ignore the error.
  45. }
  46. }
  47. }
  48.  
  49. }
  50.  
  51. private fun initCallback() {
  52. locationCallback = object : LocationCallback() {
  53.  
  54. override fun onLocationResult(locationResult: LocationResult?) {
  55. val location = locationResult?.lastLocation
  56. Log.i("LocationService", location.toString())
  57. }
  58.  
  59. }
  60. }
  61.  
  62. fun checkPermissions() {
  63. val permissionAccessCoarseLocationApproved = ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
  64. if (permissionAccessCoarseLocationApproved && Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) {
  65. val backgroundLocationPermissionApproved = ActivityCompat
  66. .checkSelfPermission(context, Manifest.permission.ACCESS_BACKGROUND_LOCATION) ==
  67. PackageManager.PERMISSION_GRANTED
  68. if (backgroundLocationPermissionApproved) {
  69. startLocationUpdates()
  70. } else {
  71. ActivityCompat.requestPermissions(context as WorkerMainActivity,
  72. arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION),
  73. PERMISSION_CODE)
  74. }
  75. } else if (!permissionAccessCoarseLocationApproved && Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) {
  76. val backgroundLocationPermissionApproved = ActivityCompat
  77. .checkSelfPermission(context, Manifest.permission.ACCESS_BACKGROUND_LOCATION) ==
  78. PackageManager.PERMISSION_GRANTED
  79. if (backgroundLocationPermissionApproved) {
  80. ActivityCompat.requestPermissions(context as WorkerMainActivity,
  81. arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION),
  82. PERMISSION_CODE)
  83. } else {
  84. ActivityCompat.requestPermissions(
  85. context as WorkerMainActivity,
  86. arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION,
  87. Manifest.permission.ACCESS_BACKGROUND_LOCATION),
  88. PERMISSION_CODE)
  89. }
  90. } else if (permissionAccessCoarseLocationApproved && Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) {
  91. startLocationUpdates()
  92. } else {
  93. ActivityCompat.requestPermissions(context as WorkerMainActivity,
  94. arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION),
  95. PERMISSION_CODE)
  96. }
  97. }
  98.  
  99. companion object {
  100. private const val PERMISSION_CODE = 41
  101. }
  102.  
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement