KitKat还需要WRITE_EXTERNAL_STORAGE吗?

man*_*eak 5 android android-permissions

文档中所述,从API级别19开始,不应该要求WRITE_EXTERNAL_STORAGE权限。因此,我已将其写到清单中:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
                 android:maxSdkVersion="18"/>
Run Code Online (Sandbox Code Playgroud)

但是,在运行使用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"/>
Run Code Online (Sandbox Code Playgroud)

我正在运行该应用程序的手机是API级别19的KitKat(4.4)。据我所知,未经许可,该应用程序应该能够正常运行。为什么我仍然会收到错误?

Com*_*are 2

从 API 级别 19 开始,不应要求 WRITE_EXTERNAL_STORAGE 权限

仅当您使用 上的方法Context(例如getExternalFilesDir())来获取特定于您的应用程序的外部存储上的标准位置时。对于其他位置,例如 上的方法报告的路径Environment,您仍然需要该权限。

或者,引用您链接到的文档

例如,从 Android 4.4(API 级别 19)开始,当您的应用想要写入外部存储上自己的应用程序特定目录(由 getExternalFilesDir() 提供的目录)时,您的应用不再需要请求 WRITE_EXTERNAL_STORAGE 权限。 。

此外,欢迎第三方图书馆出于自身原因要求您拥有此权限。

为什么我还是会收到错误?

作为其设置过程的一部分,MapsV2 似乎正在验证您是否拥有该权限。这是 MapsV2 的特权。也许他们希望在不需要此许可的有限区域之外使用外部存储。也许他们不是,但未能更新代码中的权限检查。MapsV2 是闭源的,很难分析此类事情。