如何在Android中构建Intent调起应用自身的Location permission设置页面
实现方案
Android 11(API 30及以上)系统原生提供了跳转应用专属位置权限设置页的能力,你看到的Zepp应用就是调用了官方提供的API实现的该功能,不需要使用厂商私有接口,全机型通用。

核心代码
Kotlin 实现
// 仅在Android 11及以上生效 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { val locationPermissionIntent = Intent(Settings.ACTION_APP_LOCATION_PERMISSION_SETTINGS).apply { // 传入当前应用的包名,确保只跳转当前应用的权限设置页 data = Uri.fromParts("package", packageName, null) } startActivity(locationPermissionIntent) } else { // 低于Android 11的降级方案,跳转应用详情页 val appDetailIntent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply { data = Uri.fromParts("package", packageName, null) } startActivity(appDetailIntent) }
Java 实现
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { Intent locationPermissionIntent = new Intent(Settings.ACTION_APP_LOCATION_PERMISSION_SETTINGS); locationPermissionIntent.setData(Uri.fromParts("package", getPackageName(), null)); startActivity(locationPermissionIntent); } else { Intent appDetailIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); appDetailIntent.setData(Uri.fromParts("package", getPackageName(), null)); startActivity(appDetailIntent); }
注意事项
- 该API为系统原生提供,所有符合Android兼容性规范的ROM都可以正常调用,无兼容性问题
- 建议在触发跳转前,先向用户说明需要后台位置权限的业务场景,符合Google Play的权限申请规范要求
- 可以先调用
ActivityCompat.checkSelfPermission()接口检测当前权限授予状态,仅在未获得权限时触发跳转,避免打扰已授权用户
内容的提问来源于stack exchange,提问作者Maurício Lima
相关产品推荐
相关产品推荐

