我是否必须声明WRITE_EXTERNAL_STORAGE和READ_EXTERNAL_STORAGE?

时间:2012-08-13 21:12:56

标签: android permissions android-sdcard

是否足以声明<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />或我是否还必须声明<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />? Javadocs省略了这些重要信息。

2 个答案:

答案 0 :(得分:16)

READ_EXTERNAL_STORAGE仅存在于Jelly Bean(16级)。根据{{​​3}},所有来自Jelly Bean的应用程序都有这种许可,即使没有声明它:

  

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

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

答案 1 :(得分:15)

最好明确并声明两种权限,但仅声明android.permission.WRITE_EXTERNAL_STORAGE会在构建时自动将android.permission.READ_EXTERNAL_STORAGE添加到您的APK。

您可以在APK上使用aapt dump badging命令查看Android是否考虑使用暗示的写入权限,并且您还需要读取权限。

以下是来自我的APK的一些输出,我在我的清单中声明了 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'