KitKat还需要WRITE_EXTERNAL_STORAGE吗?

时间:2015-04-16 15:04:17

标签: android android-permissions

正如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.根据我的理解,该应用程序应该能够在未经许可的情况下正常运行。为什么我还是会收到错误?

2 个答案:

答案 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级别的权限。