我知道这可能已被多次回答并且我已经搜索过,但我无法解决我的问题。每次我尝试写入SD卡时,它似乎都会进入内部存储。我的代码行只是
File root = android.os.Environment.getExternalStorageDirectory();
File dir = new File (root.getAbsolutePath() +"/mydir");
dir.mkdirs();
当我转到“我的文件”时,该目录始终显示在/ storage / emulated / 0中,而不是显示在SD卡上。我拥有清单中设置的所有权限。我有什么简单的东西吗?
P.S。我的设备是Note 3.我可以手动将文件复制到SD卡。
答案 0 :(得分:6)
如何将文件写入外部存储(SD卡)
在大多数Android设备上,外部存储不是“sdcard”。
当我转到我的文件时,目录始终显示在/ storage / emulated / 0而不是sdcard
这是因为/storage/emulated/0
是外部存储。
每个Android兼容设备都支持可用于保存文件的共享“外部存储”。这可以是可移动存储介质(例如SD卡)或内部(不可移动)存储。
Android SDK几乎不支持其他存储位置,例如SD卡。 Android 4.4有一点,如同一文档页面所述:
有时,已分配内部存储器分区以用作外部存储器的设备也可能提供SD卡插槽。当这样的设备运行Android 4.3及更低版本时,getExternalFilesDir()方法仅提供对内部分区的访问,并且您的应用程序无法读取或写入SD卡。但是,从Android 4.4开始,您可以通过调用getExternalFilesDirs()来访问这两个位置,它返回一个包含每个位置条目的File数组。阵列中的第一个条目被视为主要外部存储,您应该使用该位置,除非它已满或不可用。如果您想同时访问两个可能的位置,同时也支持Android 4.3及更低版本,请使用支持库的静态方法ContextCompat.getExternalFilesDirs()。这也会返回一个File数组,但在Android 4.3及更低版本中只包含一个条目。
答案 1 :(得分:0)
在这里,我发布了用于查找sdcard路径的代码(在问题的正文中)
How can I properly obtain the external SD card path?
它应该可以解决你的问题。 “外部”存储并不总是您的SD卡,因为许多Android设备将内部存储器视为外部分区。真实外部存储(您的SD卡)的路径由设备的构造函数设置,并且没有用于获取它的标准API。
答案 2 :(得分:0)
打印
dir.toString()
以上,看看你得到了什么。然后将其与
进行比较File dir = new File(getExternalFilesDir(null) + File.separator + "mydir");
如果你喜欢第二种选择,你应该得到(我做了)/storage/sdcard0/data/your.package.name/files/mydir,你上面的目录是mydir,而不是My Files?
答案 3 :(得分:-1)
您需要手动查找外置SD卡,具体取决于手机。
请参阅此tutorial,其中有一个示例,说明如何测试SD卡的不同路径。