在阅读真实问题之前,请先阅读我的问题简介:
在Android中,有
internal storage
和external storage
。 不要混淆,因为internal storage
与只有应用程序可访问的文件有关,而external storage
与所有应用程序都可以访问的普通文件有关,并且可以在真实中找到内部存储卡(手机的SD卡)和真正的外部存储卡(可移动micro SD卡)。我的手机SD卡(您无法删除的卡片)的路径是:
/storage/emulated/0
。
我的微型SD卡(您可以插入或删除的卡)的路径是:/storage/external_SD
。请注意:当我使用
Environment.getExternalStorageDirectory().getPath()
时,我得到:/storage/emulated/0
。
这是真正的内部存储卡(手机的SD卡)的路径,而不是真正的外部存储卡(可移动微型SD卡)。
我的问题是我可以写入“真正的内部存储卡”(电话的SD卡)但不能写入“真正的外部存储卡”(可移动微型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卡上保存文件时它仍然崩溃,但是当我保存文件夹时它成功了!
有谁知道这是什么问题?
答案 0 :(得分:2)
自从大约四年前发布的Android 4.4以来,就是这种情况。我的问题是我可以写入“真正的内部存储卡”(手机的SD卡)但不能写入“真正的外部存储卡”(可移动微型SD卡)
但我需要在micro sd卡上写文件。
您可以在getExternalFilesDirs()
上使用getExternalCacheDirs()
,getExternalMediaDirs()
和Context
。请注意这些方法名称的复数形式。如果它们返回2个以上的项目,则第二个和后续项目是可移动存储上的位置,对您的应用程序来说是唯一的,您可以读取和写入。
或者,使用Storage Access Framework并让用户选择放置内容的位置,将结果Uri
与ContentResolver
和openOuptutStream()
一起使用以写入该位置。这将允许用户使用外部存储,可移动存储以及第三方应用程序支持的位置(Google云端硬盘,SMB / CIFS文件服务器等)。