我是安卓应用程序开发的新手,我真的很想知道如果在主活动中给出了位置权限,是否有办法签入另一个class(收集一些位置数据的前台服务(。
在我的主要活动中,我在应用程序启动时直接请求权限,如下所示:
private fun requestPermissions() {
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION),
PERMISSION_ID
)
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (requestCode == PERMISSION_ID) {
if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
Toast.makeText(this, "Right Permissions Granted", Toast.LENGTH_LONG).show()
}
}
}
}
它正在工作,我可以授予我的应用程序访问该位置的权限。要在我的另一个I类中使用函数,我需要检查权限是否被授予,我这样做:
fun dummy(){
if (ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACCESS_FINE_LOCATION
) == PackageManager.PERMISSION_GRANTED
) {
// do work that needs the location permission
}
}
但是,如果我尝试执行这个函数,我会得到一个空指针引用。我在这里错过了什么?
谢谢!
您不能向服务请求权限。原因是当出现请求权限对话框时,用户自然会认为它属于前台应用程序。困惑的是谷歌为什么不允许它。我最好的建议是启动一个活动,然后请求许可。