android - 如何在 JobService 中调用 Activity Context 以获得权限?
问题描述
为了在 JobScheduler中获取位置,我需要获取 Activity Context 以调用ActivityCompat.requestPermissions
.onStartJob
ActivityCompat.requestPermissions({}, permissions, REQUEST_CODE);
但我无法将活动上下文传递给 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)
}
}
...
}
}
解决方案
推荐阅读
- c++ - 将 QPushButtons 数组连接到 lambda 函数 Qt 的问题
- github - 有没有一种方法可以在运行时动态地使 github 操作机密可用,而无需在 yaml 中显式定义每个变量?
- telegram - 电报机器人的新手
- mongodb - NestJS Mongo 引用未正确保存
- java - UDP 侦听器不接收数据
- git - 远程 Docker 容器内的 Github 访问(使用 2FA)
- c++ - 当我在控制台 C++ 程序中键入 STOP 时,我希望我的程序停止接受来自控制台的输入
- firebase - 如何在没有上下文的情况下使用提供者?
- sql - 减去最早日期的收入值减去redshift sql中的最晚日期
- python - 使用 python 数据生成 Chart.js 图表