KitKat系统中是否仍然需要WRITE_EXTERNAL_STORAGE权限?

5

文档中所述,从API 19开始,WRITE_EXTERNAL_STORAGE权限不应该是必须的。因此,我已经将以下内容添加到清单文件中:

<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。据我了解,该应用程序应该能够在没有权限的情况下正常运行。那么为什么我还是会收到错误信息呢?


请看这篇文章:https://dev59.com/n3nZa4cB1Zd3GeqPuccv - Willis
2个回答

2
从API 19开始,WRITE_EXTERNAL_STORAGE权限不应该是必需的。只有当您使用Context上的方法(例如getExternalFilesDir())来访问外部存储器上特定于您的应用程序的标准位置时才需要此权限。对于其他位置,例如Environment上的方法报告的路径,您仍然需要该权限。
引用您链接的文档:
“例如,从Android 4.4(API级别19)开始,当您的应用程序想要写入其自己的应用程序专用目录(由getExternalFilesDir()提供的目录)时,不再需要请求WRITE_EXTERNAL_STORAGE权限。”
此外,第三方库可以因为它们自己的原因而需要您拥有此权限。
“我为什么还会收到错误信息?”
看起来MapsV2在其设置过程中正在验证您是否具有权限。这是MapsV2的特权。也许他们正在寻求在不需要此权限的有限区域之外与外部存储器合作。也许他们没有这样做,但是未能更新其代码中的权限检查。由于MapsV2是闭源的,因此很难分析此类问题。

1
根据WRITE_EXTERNAL_STORAGE文档(重点在此):
引用: 从API 19级开始,不需要此权限即可读/写通过getExternalFilesDir(String)和getExternalCacheDir()返回的应用程序专用目录中的文件。
Google Maps API可能使用外部存储器上与您的应用程序无关的目录,因此您需要为所有API级别包括该权限。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接