You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取ActivityCompat.requestPermissions函数的调用响应?

获取ActivityCompat.requestPermissions的权限请求响应

当你调用ActivityCompat.requestPermissions()发起定位权限请求后,系统会通过重写onRequestPermissionsResult()方法返回请求结果,具体实现步骤如下:

1. 重写权限结果回调方法

在你的Activity或Fragment中,重写onRequestPermissionsResult(),通过请求码REQUEST_LOCATION匹配当前请求,然后判断权限是否被授予:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    
    // 匹配你发起请求时传入的REQUEST_LOCATION请求码
    if (requestCode == REQUEST_LOCATION) {
        // 验证权限数组和结果数组的有效性
        if (permissions.length > 0 && grantResults.length > 0) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 权限授予成功:执行定位相关逻辑
                // 示例:initLocationManager();
            } else {
                // 权限被拒绝:处理拒绝后的逻辑
                handlePermissionDenied();
            }
        }
    }
}

2. 处理权限拒绝的细分场景

权限被拒绝分为两种情况,需分别处理:

  • 用户单纯拒绝权限(未勾选"不再询问"):可提示用户权限的必要性
  • 用户勾选"不再询问"后拒绝:需引导用户前往应用设置页手动开启权限

实现handlePermissionDenied()方法:

private void handlePermissionDenied() {
    if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) {
        // 用户勾选了"不再询问",引导至应用设置页
        Intent settingsIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        Uri appUri = Uri.fromParts("package", getPackageName(), null);
        settingsIntent.setData(appUri);
        startActivity(settingsIntent);
    } else {
        // 仅拒绝权限,未勾选"不再询问",提示用户权限用途
        Toast.makeText(this, "需要定位权限才能获取当前位置,请重新授权", Toast.LENGTH_SHORT).show();
    }
}

注意事项

  • 确保REQUEST_LOCATION是你定义的全局常量(比如private static final int REQUEST_LOCATION = 1001;),避免请求码冲突
  • 在Android 13及以上版本,若应用需要后台定位,还需额外申请ACCESS_BACKGROUND_LOCATION权限,但当前请求的ACCESS_FINE_LOCATION按上述逻辑处理即可

内容的提问来源于stack exchange,提问作者Vans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 20:05:32