0

在阅读真正的问题之前,请阅读我的问题介绍:

在Android中有一个internal storage和一个external storage。不要混淆,因为它们internal storage与只有应用程序可以访问的文件有关,而与external storage所有应用程序都可以访问的普通文件有关,并且可以在真实的内部存储卡(手机的 sd 卡)和在真正的外部存储卡(可移动 micro sd 卡)中。

我手机sd卡的路径(不能删除的那个)是:/storage/emulated/0.
我的micro sd卡(您可以插入或移除的)的路径是:/storage/external_SD.

请注意:当我使用时,Environment.getExternalStorageDirectory().getPath()我得到:/storage/emulated/0
这是真正的内部存储卡(手机的 sd 卡)而不是真正的外部存储卡(可移动 micro sd 卡)的路径。

我的问题是我可以写入“真正的内部存储卡”(手机的 sd 卡),但不能写入“真正的外部存储卡”(可移动 micro sd 卡)。我需要将文件保存在 micro sd 卡上。

我尝试了以下事情:
FileOutputStream fos;
1)fos = new FileOutputStream(System.getenv("SECONDARY_STORAGE") + "/test.txt");
2)fos = new FileOutputStream("/storage/external_SD/test.txt");

在这两种方式中,我将 micro sd 卡的路径放在FileOutputStream的参数中,这样它就会将文件“test.txt”保存在 micro sd 卡上,但是我的应用程序崩溃并且没有任何反应!
另外,我也尝试创建一个文件夹,但没有成功。

但是,当我把手机的sd卡​​的路径,它的工作原理!
而且文件夹创建工作。

但我需要在 micro sd 卡上写入文件。

在给我答案之前,请注意以下事项
1)我在清单中设置了以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
2)在尝试应用程序之前,我曾尝试断开电缆与计算机的连接。
3)我尝试禁用调试模式。
4)我尝试了另一张微型 SD 卡。
5) 我的智能手机是 LG Optimus L7 (LG P714)。
6) 我有 Android KitKat (4.4.2)。
7)当我在另一部智能手机(三星Galaxy S3)上尝试该应用程序时,当我将文件保存在micro sd卡上时它仍然崩溃,但是当我保存一个文件夹时它成功了!

有谁知道是什么问题?

4

1 回答 1

2

我的问题是我可以写入“真正的内部存储卡”(手机的 sd 卡)但不能写入“真正的外部存储卡”(可移动 micro sd 卡)

自大约四年前发布的 Android 4.4 以来,情况就是如此。

但我需要在 micro sd 卡上写入文件。

您可以使用getExternalFilesDirs()getExternalCacheDirs()getExternalMediaDirs()Context请注意这些方法名称的复数形式。如果这些返回 2+ 项,则第二项和后续项是可移动存储上的位置,对您的应用程序来说是唯一的,您可以从中读取和写入。

或者,使用存储访问框架并让用户选择将内容放在哪里,在哪里使用结果Uri并写入该位置。这将允许用户使用外部存储、可移动存储以及第三方应用程序支持的位置(Google Drive、SMB/CIFS 文件服务器等)。ContentResolveropenOuptutStream()

于 2017-11-04T13:31:52.553 回答