Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我必须同时声明写存储和读存储吗?_Android_Permissions_Android Sdcard - Fatal编程技术网

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()
on
FileInputStream
写了一个答案,但现在我清楚地记得我的一个应用程序,其中我从不需要读取权限。事实上,文档清楚地说明了写入权限也意味着读取权限。+1,我已经找到了问题的根源;当然与此无关。谢谢-1这不是对实际问题的回答。文档清楚地表明,写权限也隐式地带来了读权限。因此,没有必要向写“未来证明”的应用程序声明这一点;只有需要只读访问的应用才需要。我第一次看到评论比帖子更有用@克丽斯特拉顿是100%正确的。为什么最好同时声明这两个呢?对于Marsh,您必须请求运行时perm,并且必须同时执行读和写操作是没有意义的,尤其是当write隐式地提供read时。