MANAGE_EXTERNAL_STORAGE权限请求没有弹出对话框

移动开发 2026-07-09

我正在请求MANAGE_EXTERNAL_STORAGE权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
        tools:ignore="AllFilesAccessPolicy" />

    <application
        ...

我是在Activity的 onCreate中调用这个函数:

@RequiresApi(Build.VERSION_CODES.R)
fun checkStoragePermission() {
    Manifest.permission.MANAGE_EXTERNAL_STORAGE.let {
        val permission = ContextCompat.checkSelfPermission(this,it)
        Log.d("--- MusinK ---", "MANAGE_EXTERNAL_STORAGE: $permission")
        if (permission != PackageManager.PERMISSION_GRANTED) {
            Log.d("--- MusinK ---", "requesting...")
            requestPermissions(this, arrayOf(it), 7)
        }
    }
}

变量 permission 的值为 -1,且日志中出现 正在请求...,但没有对应的用户对话框。我到底还漏了什么?

注:我不在乎Google的政策。这个应用不会上架到Play商店。我已经通过USB将手机连接好,当我在Android Studio中点击运行时,我想看到对话框。

我已经多次删除应用;因此,这不是因为之前的拒绝导致的。

解决方案

你没有看到对话框的原因是 MANAGE_EXTERNAL_STORAGE 是一种 特殊应用访问权限,不是标准的运行时权限。因此它不能通过常规的 requestPermissions() 对话框被授予。你必须使用一个 Intent 将用户引导到特定的系统设置页面:

if (!Environment.isExternalStorageManager()) {
    val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
    intent.data = Uri.parse("package:$packageName")
    startActivity(intent)
}

因为你的应用仅供私人使用,这是在Android 11及以上版本中绕过该限制的正确方式。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章