Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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
如何在Nougat/Android 7.0(支持虚拟现实)上写入SD卡?_Android_Sd Card_Virtual Reality_Android 7.0 Nougat_Writing - Fatal编程技术网

如何在Nougat/Android 7.0(支持虚拟现实)上写入SD卡?

如何在Nougat/Android 7.0(支持虚拟现实)上写入SD卡?,android,sd-card,virtual-reality,android-7.0-nougat,writing,Android,Sd Card,Virtual Reality,Android 7.0 Nougat,Writing,我正在寻找一种方法,使我的VR Android应用程序(适用于三星Galaxy S7和S9)能够将文件写入SD卡(例如,下载.zip文件并解压缩) 该应用程序主要用于对Android/智能手机不太了解的人,他们不想处理任何复杂的事情(不一定是老年人,但距离足够近),这就是为什么我想让他们尽可能容易地使用它,这还包括我自己做出选择(并为他们设置)而不是显示复杂的对话框 特殊要求: 卸载应用程序时不能删除文件-这就是为什么我不能使用getExternalFilesDirs()(存储卷)的原因 文件

我正在寻找一种方法,使我的VR Android应用程序(适用于三星Galaxy S7和S9)能够将文件写入SD卡(例如,下载.zip文件并解压缩)

该应用程序主要用于对Android/智能手机不太了解的人,他们不想处理任何复杂的事情(不一定是老年人,但距离足够近),这就是为什么我想让他们尽可能容易地使用它,这还包括我自己做出选择(并为他们设置)而不是显示复杂的对话框

特殊要求:

  • 卸载应用程序时不能删除文件-这就是为什么我不能使用
    getExternalFilesDirs()
    (存储卷)的原因
  • 文件夹中发生的一切都必须易于访问,因此zip文件也可以传输到您电脑上的SD卡上(如果文件太大,则不用通过应用程序下载),而无需经历大量的级别和记住长的文件夹路径
  • 使用
    Storage Access Framework
    也不是一个好的选择,因为选择文件夹不仅不利于虚拟现实,而且还需要了解大多数用户在每次打开我的应用程序时根本没有和/或不想处理的文件夹。但是:如果有一种方法只显示一次(在安装应用程序后的第一次启动时),甚至可以将根文件夹设置为我选择的文件夹,这样用户只需点击“接受”,那就值得一试(除非有更简单的方法)
是的,我确实设置了android.permission.WRITE_EXTERNAL_STORAGE权限,还启用了开发者设置,但尝试写入SD卡时仍会抛出“拒绝访问”异常


是否有其他适合VR的SD卡写入方式?

minSdkVersion
设置为24和。这会弹出一个对话框,但这是一个简单的权限授予,只需单击“确定”按钮。否则,正如我们前面所讨论的,Android 4.4+上没有记录和支持任何符合您标准的内容。作为参考,请参阅规则。权限授予是可以的,但正如我之前所说的(您删除了整个帖子,因此我无法返回),我不能使用API24作为MinSDK版本,因为targetSdkVersion当前设置为23,我还没有测试任何其他版本。在你写文章时,我正确地编辑了(zip)文件:这些文件不属于“createAccessIntent()”允许访问的任何类别(它们不是电影、图片、下载等),再加上zip文件可以包含多少文件,使用URI是不切实际的。zip文件将在您的PC上以“createAccessIntent()”显示在哪个文件夹/文件夹级别?“zip文件不属于任何类别”“createAccessIntent()”提供访问权限”--您可以使用
null
作为参数来访问存储卷的根目录IIRC。“再加上zip文件可以有多少个文件,使用URI是不切实际的”--这与使用文件没有明显区别。在这两种情况下,您都需要打开一个
OutputStream
,在其中写入单个内容。这是一个
FileOutputStream
还是从
openOutputStream()
获得的文件,这并不是一个主要区别。它的不同程度足以让我不得不改变整个应用程序,以支持“OutputStream”类型和URI。您知道存储卷的根被称为什么(它的路径)吗?它可能不在sd卡的根附近(如果它甚至可以在您的PC上访问),是吗(这将不符合要求2)?我刚刚想了一件事:是否可以只显示Storage Access Framework“文件夹选择”一次(在第一次应用程序启动时),甚至可以将根文件夹设置为我希望存储文件的位置,这样用户只需按“OK”?“您知道存储卷的根被称为什么(路径)?“--根据定义,这是不可知的,因为它取决于卷本身。“它可能不在sd卡的根附近”——它是sd卡的根。请记住,可移动存储包含的不仅仅是SD卡。“是否可以只显示存储访问框架“文件夹拾取一次(在第一次应用程序启动时)”--是。“甚至可以将根文件夹设置为我希望存储文件的位置”--否。