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

如何取消最低API 23权限要求,将应用最低SDK版本降至17?

适配最低SDK 17的修改方案

1. 调整Gradle配置

直接修改模块级build.gradle文件中的配置即可,不需要受限于动态权限的要求:

  • 将minSdk参数值改为17
  • targetSdk、compileSdk可以保留现有高版本配置,不需要同步降级
    你之前的认知误区是把动态权限适配的要求当成了minSdk的强制最低要求,实际上动态权限只需要targetSdk≥23即可,minSdk可以向下兼容到更低版本,只需要做好逻辑分层。

2. 补充权限申请的版本分支判断

Android 6.0(API23)以下的系统会在应用安装时默认授予清单中声明的所有权限,不需要动态申请,你需要在触发权限申请的代码位置补充版本判断逻辑:

首先确保AndroidManifest.xml中已经正常声明存储权限,所有系统版本都需要该配置:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

权限申请入口处的逻辑示例:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    // API23及以上系统走动态权限申请流程
    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE},
            2000);
} else {
    // API23以下系统默认已有权限,直接执行授权后的对应逻辑
    if (this.blnStart) {
        callnext();
    } else if (this.blnMyCreation) {
        callmycreation();
    }
}

3. 现有权限回调代码调整

你提供的onRequestPermissionsResult代码不需要做逻辑修改,仅需要调整注解即可:

  • 将类上方的@TargetApi(23)替换为@RequiresApi(api = Build.VERSION_CODES.M)
    该回调方法仅会在API23及以上的系统中被触发,低版本不会执行到该部分代码,不会出现兼容问题。修改后的完整代码如下:
@RequiresApi(api = Build.VERSION_CODES.M)
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        case 2000:
            Map<String, Integer> perms = new HashMap();
            perms.put("android.permission.WRITE_EXTERNAL_STORAGE", Integer.valueOf(0));
            perms.put("android.permission.READ_EXTERNAL_STORAGE", Integer.valueOf(0));
            if (grantResults.length > 0) {
                for (int i = 0; i < permissions.length; i++) {
                    perms.put(permissions[i], Integer.valueOf(grantResults[i]));
                }
                if (((Integer) perms.get("android.permission.WRITE_EXTERNAL_STORAGE")).intValue() == 0 && ((Integer) perms.get("android.permission.READ_EXTERNAL_STORAGE")).intValue() == 0) {
                    if (this.blnStart) {
                        callnext();
                        return;
                    } else if (this.blnMyCreation) {
                        callmycreation();
                        return;
                    } else {
                        return;
                    }
                } else if (ActivityCompat.shouldShowRequestPermissionRationale(this, "android.permission.WRITE_EXTERNAL_STORAGE") || ActivityCompat.shouldShowRequestPermissionRationale(this, "android.permission.READ_EXTERNAL_STORAGE")) {
                    showDialogOK("Permission required for this app", new NewGlobe());
                    return;
                } else {
                    Toast.makeText(this, "Go to settings and enable permissions", Toast.LENGTH_SHORT).show();
                    return;
                }
            }
            return;
        default:
            return;
    }
}

完成以上三处修改后即可正常将最低适配版本降到17,同时保留高版本系统的动态权限适配逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:30:02