1+ package com.nlinterface.utility
2+
3+ import android.app.Service
4+ import android.content.Intent
5+ import android.content.pm.PackageManager
6+ import android.os.IBinder
7+ import android.util.Log
8+ import androidx.core.app.ActivityCompat
9+ import com.google.android.gms.location.FusedLocationProviderClient
10+ import com.google.android.gms.location.LocationCallback
11+ import com.google.android.gms.location.LocationRequest
12+ import com.google.android.gms.location.LocationResult
13+ import com.google.android.gms.location.LocationServices
14+ import com.google.android.gms.location.Priority
15+
16+ class LocationGetter : Service () {
17+
18+ private lateinit var fusedLocationClient: FusedLocationProviderClient
19+ private lateinit var locationCallback: LocationCallback
20+ private val globalParameters = GlobalParameters .instance!!
21+
22+ override fun onStartCommand (intent : Intent ? , flags : Int , startId : Int ): Int {
23+
24+ fusedLocationClient = LocationServices .getFusedLocationProviderClient(this )
25+ setupLocationCallback()
26+ startLocationUpdates()
27+
28+ return START_STICKY
29+ }
30+
31+ private fun setupLocationCallback () {
32+ locationCallback = object : LocationCallback () {
33+ override fun onLocationResult (locationResult : LocationResult ) {
34+ if (locationResult.locations.isNotEmpty()) {
35+ globalParameters.location = locationResult.lastLocation!!
36+ Log .i(" CurrentLocation" , " The current location is:" +
37+ " ${globalParameters.location.latitude} , " +
38+ " ${globalParameters.location.longitude} " )
39+ }
40+ }
41+ }
42+ }
43+
44+ private fun startLocationUpdates () {
45+ if (ActivityCompat .checkSelfPermission(this ,
46+ android.Manifest .permission.ACCESS_FINE_LOCATION )
47+ == PackageManager .PERMISSION_GRANTED ) {
48+ val locationRequest = LocationRequest .Builder (
49+ Priority .PRIORITY_LOW_POWER , 10000
50+ ).apply {
51+ setMinUpdateIntervalMillis(5000 )
52+ }.build()
53+ fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, null )
54+ }
55+ }
56+
57+ override fun onBind (intent : Intent ? ): IBinder ? {
58+ return null
59+ }
60+
61+ override fun onDestroy () {
62+ fusedLocationClient.removeLocationUpdates(locationCallback)
63+ Log .i(" Location" , " Accessing the location was stopped" )
64+ super .onDestroy()
65+ }
66+ }
0 commit comments