我已将我的应用程序切换为目标API 27,现在它无法被授予WRITE_EXTERNAL_STORAGE
权限--grantResult
始终为-1
。
我的应用程序需要此权限,因为它不使用应用程序的私有外部存储空间(从API 19开始不需要WRITE_EXTERNAL_STORAGE
)。
我知道在API 26中有权限的行为更改。然而,这并不能解释我的问题。
我以标准方式请求READ_EXTERNAL_STORAGE
和WRITE_EXTERNAL_STORAGE
权限:
ActivityCompat.requestPermissions(activity, new String[] {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, requestCode);
(两个权限都在清单文件中通过<uses-permission
声明)。
对话框出现,我点击“允许”:
然而,在onRequestPermissionsResult
回调中,我得到了一个-1
(拒绝)的结果,对于WRITE_EXTERNAL_STORAGE
权限,而对于READ_EXTERNAL_STORAGE
权限则为0
(授予)。
既然我已经请求并且可能已经授予了这两个权限,那么这个结果不应该是两个权限都为0
吗?
我尝试过仅请求WRITE_EXTERNAL_STORAGE
权限,但在这种情况下,对话框根本不会出现。
还有一个细节:我刚刚检查了build/intermediates/manifests/full/debug
中的合并清单,并注意到WRITE_EXTERNAL_STORAGE
权限具有属性android:maxSdkVersion="18"
(我的清单中没有此属性)。这可能是因为我的应用程序具有minApiVersion=21
,但我不确定。
build/intermediates/manifests/full/debug
下合并后的清单文件,并注意到WRITE_EXTERNAL_STORAGE
权限有一个属性android:maxSdkVersion="18"
(我的清单文件中没有这个属性)。这可能是导致问题的原因吗? - Denys Kniazhev-Support Ukraine<uses-permission>
元素上添加tools:remove="android:maxSdkVersion"
,看看能否解决问题。 - CommonsWareminSdkVersion
是21
,所以清单合并器添加了maxSdkVersion=18
。这感觉很不直观,值得向谷歌报告一个错误。我已经更新了有关合并后清单的信息的问题。如果您将您的建议发布为答案,我将非常乐意接受。谢谢! - Denys Kniazhev-Support Ukraine