MANAGE_EXTERNAL_STORAGE权限请求没有弹出对话框
我正在请求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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。