正如documentation中所述,WRITE_EXTERNAL_STORAGE权限不应该是从API级别19开始的要求。因此,我已将此写入清单:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18"/>
但是,在运行使用Google Maps V2的应用程序并因此需要访问外部存储空间时,我会得到SecurityException
:
java.lang.SecurityException: The Maps API requires the additional following permissions to be set in the AndroidManifest.xml to ensure a correct behavior:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
我运行应用程序的手机是KitKat(4.4),它是API级别19.根据我的理解,该应用程序应该能够在未经许可的情况下正常运行。为什么我还是会收到错误?
答案 0 :(得分:2)
WRITE_EXTERNAL_STORAGE权限不应是从API级别19开始的要求
仅当您使用Context
上的方法(例如getExternalFilesDir()
)才能获取特定于您的应用的外部存储空间的标准位置。对于其他位置,例如Environment
上的方法报告的路径,您仍需要权限。
或者引用the documentation that you linked to:
例如,从Android 4.4(API级别19)开始,当您的应用想要写入外部存储上自己的特定于应用程序的目录(getExternalFilesDir提供的目录)时,您的应用不再需要请求WRITE_EXTERNAL_STORAGE权限())。
此外,欢迎第三方图书馆要求您出于自己的原因获得此许可。
为什么我还是会收到错误?
看起来MapsV2正在验证您是否拥有其设置过程中的权限。这是MapsV2的特权。也许他们希望在不需要此许可的有限区域之外使用外部存储。也许他们不是但未能更新其代码中的权限检查。作为封闭源的MapsV2很难分析这类事情。
答案 1 :(得分:1)
根据WRITE_EXTERNAL_STORAGE
文件(强调我的):
从API级别19开始,不需要此权限 读取/写入特定于应用程序的目录中的 getExternalFilesDir(String)和getExternalCacheDir()。
Google Maps API可能使用外部存储上的目录非特定于您的应用程序,因此您需要包含所有API级别的权限。