【问题标题】:writing to storage instead of emulated on nexus 7写入存储而不是在 nexus 7 上模拟
【发布时间】:2014-05-26 13:36:50
【问题描述】:

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

//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/

【问题讨论】:

    标签: android android-sdcard mount filewriter


    【解决方案1】:

    当您“将设备连接到 [您的] 机器”时,您不会获得设备的根目录。您将可以访问外部存储。

    另外,getExternalStoragePublicDirectory() does not take random values as parameters。使用 Environment.DIRECTORY_DOWNLOADS 之类的东西。

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

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

    这是/mnt/shell/emulated/0/的内容,在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 series 试图解释所有这些。

    【讨论】:

    • 对不起,我不明白你的回答。如何获取根目录?关于公共目录部分,这是一个错误,我尝试了代码,试图了解有关目录的一些信息。我用getExtranalStorageDirectory()
    • @Yotam:如果我将 Nexus 7 (2013) 插入我的 Ubuntu 13.10 机器,“Nexus 7”会出现在我的设备名册中。单击它会给我一个“内部存储”选项。尽管名称如此,但它是您通过 Environment.getExternalStorageDirectory() 以编程方式访问的目录。
    • 我希望如此。但是,在我的设备上浏览时,我发现我有三个路径。 /storage/sdcard0(安装在我机器上的路径)、/storage/emulated/0(即Envrionment.getExternalStorageDirectory() 品脱和/storage/emulated/legacy(我不知道)。我猜两者之间有一个链接(三个? ) 目录在一个方向上工作,而不是在另一个方向上。
    • @Yotam:由于这些目录都无法通过本机 Ubuntu 和 MTP 看到,因此我假设您使用的是 DDMS。在这种情况下,它们都不相关。您的外部存储是/mnt/shell/emulated/0,供主要设备用户使用。 Android 4.2+ 支持平板电脑上每个设备的多个帐户,因此您在运行时看到的目录(当您的应用程序作为特定帐户运行时)不是您从 DDMS 中看到的(它作为独立的 Linux 用户运行)那些)。
    • 对不起,我不清楚。我上面给出的路径是在我的设备上找到的。在我的机器上,我只看到/run/user/1000/gvfs/mtp:host=%5Busb%3A002%2C005%5D/Internal storage
    猜你喜欢
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多