如何实现background location权限请求用dialog而非跳转应用设置?
实现后台位置权限的Dialog请求方式
要实现像Simply Auto那样通过系统Dialog请求后台位置权限(而非跳转设置页),需遵循以下条件和步骤:
前提要求:
- 应用的
targetSdkVersion需设置为30及以上(对应Android 11+系统) - 已成功授予前台位置权限(
ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION)
- 应用的
具体实现步骤:
- 在
AndroidManifest.xml中声明所需权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />- 在代码中先校验前台权限状态,再发起后台权限请求:
// 定义请求码 private const val REQUEST_CODE_BACKGROUND_LOC = 1001 // 检查前台权限并请求后台权限 fun requestBackgroundLocationPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions( this, arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION), REQUEST_CODE_BACKGROUND_LOC ) } } // 处理权限请求结果 override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) if (requestCode == REQUEST_CODE_BACKGROUND_LOC) { if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 后台位置权限已授予 } else { // 权限被拒绝,可引导用户手动去设置页开启 } } }- 在
注意事项:
- 该Dialog请求方式仅在Android 11(API 30)及以上系统生效,Android 10(API 29)及以下版本请求后台位置权限仍会跳转至应用设置页。
- 即使通过Dialog请求,若用户拒绝权限,后续再次请求仍会直接跳转至设置页,需做好用户引导。
内容的提问来源于stack exchange,提问作者Kamran Akbary
相关产品推荐
相关产品推荐

