我有一个音乐播放器应用程序(只有我使用,它不在 Google Play 中,也永远不会在),具有以下清单权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
设备报告该应用程序还被授予了 ALL_FILES_ACCESS 权限(我希望如此)。
尽管如此,当我尝试通常的操作时,应用程序仍然报告它没有 WRITE_EXTERNAL_STORAGE 权限requestPermissions
。
但是,应用程序设置中没有允许存储的权限,并且显示No permissions denied
。
我尝试用adb shell
以下方式强制执行:
appops set --uid myApp.xvfmusic WRITE_EXTERNAL_STORAGE allow
并且应用程序仍然不断请求权限......
为什么这个东西要求我设置 WRITE_EXTERNAL_STORAGE,并且为什么在应用程序配置中没有这样的权限可以设置?
您的设备似乎运行的是 Android 13+,因此您无法请求“WRITE_EXTERNAL_STORAGE”
MANAGE_EXTERNAL_STORAGE 取代 WRITE_EXTERNAL_STORAGE 并允许广泛访问外部存储。如果您已获得 MANAGE_EXTERNAL_STORAGE 权限,则无需 WRITE_EXTERNAL_STORAGE。
要发布具有 MANAGE_EXTERNAL_STORAGE 权限的应用,您需要明确说明请求该权限的理由,否则应用将被拒绝。由于您未在 Google Play 上发布应用,因此没问题。但那些认为 MANAGE_EXTERNAL_STORAGE 是 WRITE_EXTERNAL_STORAGE 替代方案的人错了。如果他们无法明确说明请求 MANAGE_EXTERNAL_STORAGE 的必要性(大多数应用都无法做到这一点),他们的应用将被拒绝。他们的选择应该是应用特定的外部存储(Android/data/package-name)访问或上述文档中描述的访问