无法访问辅助存储(外部可移动微型 SD 卡)

Can't access the secondary storage (the external removable micro sd card)

看真题前请看我的问题介绍:

In Android there are an internal storage and an external storage. Don't be confused, because the internal storage relates to files that are accessible only by the app, and the external storage relates to normal files that can be accessed by all apps and can be found both in the real internal storage card (the phone's sd card) and in the real external storage card (the removable micro sd card).

My path of the phone's sd card (the one that you can't remove) is: /storage/emulated/0.
My path of the micro sd card (the one that you can insert or remove) is: /storage/external_SD.

Please note: When I use Environment.getExternalStorageDirectory().getPath() i get: /storage/emulated/0.
This is the path of the real internal storage card (the phone's sd card) and not the real external storage card (the removable micro sd card).

我的问题是我可以写入 "real internal storage card"(phone 的 sd 卡)但不能写入 "real external storage card"(可移动的微型 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 卡上,但我的应用程序崩溃了,没有任何反应!
另外,我也试过创建一个文件夹,但是没有用。

但是,当我输入phone的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) 我试了另一张micro sd卡。
5) 我的smartphone是LG Optimus L7 (LG P714).
6) 我有 Android KitKat (4.4.2).
7) 当我在另一个smartphone (Samsung Galaxy S3) 上尝试应用程序时,当我在micro sd卡上保存文件时它仍然崩溃,但是当我保存一个文件夹时它成功了!

有人知道问题出在哪里吗?

My problem is that I can write to the "real internal storage card" (the phone's sd card) but not to the "real external storage card" (the removable micro sd card)

从大约四年前发布的 Android 4.4 开始就是这种情况。

But I need to write files on the micro sd card.

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

或者,使用 Storage Access Framework 并让用户选择放置内容的位置,使用结果 UriContentResolveropenOuptutStream() 写入那个位置。这将允许用户使用外部存储、可移动存储以及第三方应用程序支持的位置(Google 驱动器、SMB/CIFS 文件服务器等)。