WRITE_EXTERNAL_STORAGE KitKat 仍然需要吗?
WRITE_EXTERNAL_STORAGE still required with KitKat?
如 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"/>
phone 我正在 运行 应用程序是 KitKat (4.4),它是 API 级别 19。据我了解,该应用程序应该能够 运行 未经许可罚款。为什么我还是会收到错误消息?
the WRITE_EXTERNAL_STORAGE permission should not be a requirement starting from API level 19
仅当您在 Context
上使用方法时,例如 getExternalFilesDir()
,才能获取特定于您的应用程序的外部存储的标准位置。对于其他位置,例如 Environment
上的方法报告的路径,您仍然需要权限。
或者,引用 the documentation that you linked to:
For example, beginning with Android 4.4 (API level 19), it's no longer necessary for your app to request the WRITE_EXTERNAL_STORAGE permission when your app wants to write to its own application-specific directories on external storage (the directories provided by getExternalFilesDir()).
此外,欢迎第三方图书馆出于自身原因要求您拥有此权限。
Why do I get the error anyway?
作为其设置过程的一部分,MapsV2 似乎正在验证您是否拥有权限。这是 MapsV2 的特权。也许他们希望在不需要此许可的有限区域之外使用外部存储。也许他们不是,但未能更新他们代码中的权限检查。 MapsV2 是闭源的,这种东西很难分析。
根据 WRITE_EXTERNAL_STORAGE
文档(强调我的):
Starting in API level 19, this permission is not required to
read/write files in your application-specific directories returned by
getExternalFilesDir(String) and getExternalCacheDir().
Google 地图 API 可能正在使用外部存储上的目录,这些目录 不是 特定于您的应用程序,因此您需要包括所有 API 级别的权限。
如 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"/>
phone 我正在 运行 应用程序是 KitKat (4.4),它是 API 级别 19。据我了解,该应用程序应该能够 运行 未经许可罚款。为什么我还是会收到错误消息?
the WRITE_EXTERNAL_STORAGE permission should not be a requirement starting from API level 19
仅当您在 Context
上使用方法时,例如 getExternalFilesDir()
,才能获取特定于您的应用程序的外部存储的标准位置。对于其他位置,例如 Environment
上的方法报告的路径,您仍然需要权限。
或者,引用 the documentation that you linked to:
For example, beginning with Android 4.4 (API level 19), it's no longer necessary for your app to request the WRITE_EXTERNAL_STORAGE permission when your app wants to write to its own application-specific directories on external storage (the directories provided by getExternalFilesDir()).
此外,欢迎第三方图书馆出于自身原因要求您拥有此权限。
Why do I get the error anyway?
作为其设置过程的一部分,MapsV2 似乎正在验证您是否拥有权限。这是 MapsV2 的特权。也许他们希望在不需要此许可的有限区域之外使用外部存储。也许他们不是,但未能更新他们代码中的权限检查。 MapsV2 是闭源的,这种东西很难分析。
根据 WRITE_EXTERNAL_STORAGE
文档(强调我的):
Starting in API level 19, this permission is not required to read/write files in your application-specific directories returned by getExternalFilesDir(String) and getExternalCacheDir().
Google 地图 API 可能正在使用外部存储上的目录,这些目录 不是 特定于您的应用程序,因此您需要包括所有 API 级别的权限。