写入存储而不是在nexus 7上模拟

时间:2014-04-12 09:55:25

标签: android android-sdcard mount filewriter

在我的代码中,使用此代码将文件写入文件

//the path  
String fileName = Environment.getExternalStoragePublicDirectory(fileName) + File.separator+"Foo"+File.separator;
File dir = new File(fileName);
//the file
fileName += "bar"
File file = new File(fileName);
try {
file.createNewFile();   
} catch (IOException e) {
    //do nothing, for now
}
return;

这会导致文件被写入/storage/emulated/0/而不是/storage/sdcard0。我遇到的问题是,当我将设备连接到我的机器(Ubuntu 13.10)时,我看不到/storage/emulated/0/

1 个答案:

答案 0 :(得分:0)

当您“将设备连接到[您的]计算机”时,您无法获得设备的根目录。您将可以访问外部存储空间。

此外,getExternalStoragePublicDirectory() does not take random values as parameters。使用类似Environment.DIRECTORY_DOWNLOADS的内容。

例如,这是我在插入Nexus 7(2013)时在Ubuntu 13.10上看到的内容:

Nexus 7 Mounted on Ubuntu

当我进入“内部存储”时,我看到:

Nexus 7 "Internal storage"

以下是/mnt/shell/emulated/0/的内容,如DDMS所示:

Nexus 7 "Internal storage" in DDMS

您会注意到“内部存储”的目录列表与/mnt/shell/emulated/0/的目录列表相同。那是因为它们是同一个目录

对于主要用户帐户,Environment.getExternalStorageDirectory()指向在DDMS中查看时显示为/mnt/shell/emulated/0/并且通过MTP显示为“内部存储”的位置(尽管后者是Nexus 7的名称 - 它可能因设备而异。)

另请注意,MTP可能无法显示/mnt/shell/emulated/0/中的所有内容,因为MTP实际上是由MediaStore驱动的,并且并非所有内容都可能已编入索引。如果您将文件写入外部存储,请使用MediaScannerConnectionscanFile()以确保设备的MTP连接结束了解它们。

我为混合的“内部存储”/“外部存储”术语道歉。我刚刚写完a blog post serie试图解释所有这些。