For getting Location in JobScheduler, I need to get Activity Context for calling ActivityCompat.requestPermissions
in onStartJob
.
ActivityCompat.requestPermissions({}, permissions, REQUEST_CODE);
But I can't pass Activity Context to JobScheduler.
class GetLocationJob : JobService() {
override fun onStopJob(params: JobParameters?): Boolean {
...
}
override fun onStartJob(params: JobParameters?): Boolean {
// Check Permission
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_COARSE_LOCATION
) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_BACKGROUND_LOCATION
) != PackageManager.PERMISSION_GRANTED
) {
val permissions = arrayOf(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_BACKGROUND_LOCATION
)
// can't pass activity context
ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE);
}
// 2. create client
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
// 3. get location
fusedLocationClient.lastLocation
.addOnSuccessListener { location: Location? ->
println(location)
if (location != null) {
println(location.latitude)
}
if (location != null) {
println(location.longitude)
}
}
...
}
}