37

申报就够了<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />还是我也必须申报<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />?Javadocs 省略了这一重要信息。

4

2 回答 2

19

最好是显式地声明两个权限,但仅声明android.permission.WRITE_EXTERNAL_STORAGE会在构建时自动添加android.permission.READ_EXTERNAL_STORAGE到您的 APK。

您可以在 APK 上使用该命令aapt dump badging来查看 Android 认为使用写入权限意味着您也需要读取权限。

这是我的一个 APK 的 aapt 的一些输出,我 WRITE_EXTERNAL_STORAGE在清单中声明:

uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE'
uses-permission:'android.permission.READ_EXTERNAL_STORAGE'
uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE',
  'requested WRITE_EXTERNAL_STORAGE'
于 2013-03-07T11:58:46.743 回答
17

READ_EXTERNAL_STORAGE仅存在于 Jelly Bean(16 级)。根据文档,Jelly Bean 的所有应用程序都具有该权限,即使没有声明它:

提供对外部存储的受保护读取访问。默认情况下,在 Android 4.1 中,所有应用程序仍然具有读取权限。这将在未来的版本中进行更改,以要求应用程序使用此权限明确请求读取访问权限。如果您的应用程序已经请求写入权限,它也会自动获得读取权限。有一个新的开发人员选项可以打开读取访问限制,以便开发人员根据 Android 未来的行为来测试他们的应用程序。

因此,您应该声明它以供将来兼容,但这可能不是问题的根源,除非您使用的是果冻豆手机并设置开发人员选项“保护 USB 存储”选项。

于 2012-08-13T21:17:58.497 回答