2015-04-16 70 views
3

正如documentation提到的,WRITE_EXTERNAL_STORAGE权限不应该从API级别19.因此开始一个要求,我写这清单:KitKat仍然需要WRITE_EXTERNAL_STORAGE?

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" 
       android:maxSdkVersion="18"/> 

但是,运行我的应用程序时使用谷歌地图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"/> 

电话我运行应用程序是奇巧(4.4),这是API级别19.我的理解,应用程序应该能够未经许可即可正常运行。无论如何,为什么我会得到这个错误?

+0

看看这篇文章:http://stackoverflow.com/questions/20328082/require-permission-only-for-older-android-versions-maxsdkversion-does-not-work – Willis

回答

2

的WRITE_EXTERNAL_STORAGE权限不应该是,如果您使用的是Context方法,如getExternalFilesDir(),以获得在外部存储上的特异性针对您的标准位置从API级别只有19

开始要求应用程序。对于其他位置,例如由Environment上的方法报告的路径,您仍需要该权限。

或者引用the documentation that you linked to

例如,采用Android 4.4(API级别19)开始,它不再是必要的,当你的应用程序想要写自己的您的应用程序请求WRITE_EXTERNAL_STORAGE许可外部存储器上的应用程序特定目录(由getExternalFilesDir()提供的目录)。

另外,欢迎第三方库为了自己的理由要求您拥有此权限。

为什么我会收到错误?

看起来像MapsV2正在验证您是否具有权限作为其设置过程的一部分。这是MapsV2的特权。也许他们希望在不需要此许可的有限领域之外使用外部存储。也许他们没有更新他们代码中的权限检查。作为封闭源代码的MapsV2很难分析这类事情。

0

按照WRITE_EXTERNAL_STORAGE文档(重点矿山):

API级别19开始,此权限不需要 读/写文件由 getExternalFilesDir返回您的应用程序特定的目录(字符串)和getExternalCacheDir()。

的谷歌地图API的使用大概在外部存储是特定于应用程序的目录,因此你需要包括对所有API级别的权限。