Android 我必须同时声明写存储和读存储吗?
声明Android 我必须同时声明写存储和读存储吗?,android,permissions,android-sdcard,Android,Permissions,Android Sdcard,声明足够了吗?还是我还必须声明?Javadocs省略了这一重要信息。READ\u EXTERNAL\u STORAGE仅在Jelly Bean(16级)时存在。根据,自Jelly Bean起的所有应用程序都具有该权限,即使没有声明: 提供对外部存储的受保护读取访问。在安卓4.1中 默认情况下,所有应用程序仍具有读取权限。这将被改变 在将来的版本中,要求应用程序明确请求 使用此权限进行读取访问。如果你已经申请了 请求写访问权限,它也将自动获得读访问权限。 有一个新的开发者选项可以打开读访问限制,
足够了吗?还是我还必须声明
?Javadocs省略了这一重要信息。READ\u EXTERNAL\u STORAGE
仅在Jelly Bean(16级)时存在。根据,自Jelly Bean起的所有应用程序都具有该权限,即使没有声明:
提供对外部存储的受保护读取访问。在安卓4.1中
默认情况下,所有应用程序仍具有读取权限。这将被改变
在将来的版本中,要求应用程序明确请求
使用此权限进行读取访问。如果你已经申请了
请求写访问权限,它也将自动获得读访问权限。
有一个新的开发者选项可以打开读访问限制,
让开发者测试他们的应用程序,看看Android将如何
在将来表现得好一点
因此,为了将来的兼容性,您应该声明它,但这可能不是问题的根源,除非您使用的是Jelly Bean手机,并设置了开发者选项“保护USB存储”选项。最好明确声明这两个权限,但是只声明
android.permission.WRITE\u EXTERNAL\u STORAGE
将在构建时自动将android.permission.READ\u EXTERNAL\u STORAGE
添加到APK中
您可以在APK上使用命令aapt dump-bading
,查看Android是否考虑使用写入权限来暗示您还需要读取权限
下面是aapt为我的APK提供的一些输出,我在清单中只声明了WRITE\u EXTERNAL\u 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'
我很确定没有任何权限是自动授予的。您不必设置读取权限。尝试
BitmapFactory.decodeStream()
onFileInputStream
写了一个答案,但现在我清楚地记得我的一个应用程序,其中我从不需要读取权限。事实上,文档清楚地说明了写入权限也意味着读取权限。+1,我已经找到了问题的根源;当然与此无关。谢谢-1这不是对实际问题的回答。文档清楚地表明,写权限也隐式地带来了读权限。因此,没有必要向写“未来证明”的应用程序声明这一点;只有需要只读访问的应用才需要。我第一次看到评论比帖子更有用@克丽斯特拉顿是100%正确的。为什么最好同时声明这两个呢?对于Marsh,您必须请求运行时perm,并且必须同时执行读和写操作是没有意义的,尤其是当write隐式地提供read时。