如何在可通过USB访问的外部存储中创建文件/文件夹?

时间:2014-06-30 14:13:58

标签: android file usb storage

我正在使用Nexus 5作为我的第一款Android应用的测试设备。当我通过USB将手机连接到我的PC时,它会在浏览器中弹出,我可以访问设备上的不同文件和文件夹(就像设备是USB记忆棒一样......)。

我认为这些文件和文件夹代表External Storage,我的应用程序在External Storage中存储的每个文件/文件夹也可以通过USB访问。

在我的应用中External Storage创建文件/文件夹没问题,这些文件在可通过USB访问的文件和文件夹中不可见:

public static File getAppPuplicExternalStorageDir() {
    File appDir = null;

    try {
        appDir = new File(Environment.getExternalStorageDirectory(), "MyApp");
        appDir.mkdirs();
    }
    catch (Exception e) { }

    return appDir;
}


...
File noMediaFile = new File(getAppPuplicExternalStorageDir(), ".nomedia");
noMediaFile.createNewFile();
...

此代码完美运行。我可以测试文件是否存在,删除文件,创建其他文件等没有任何问题。

当我检查appDir时,它有路径/storage/emulated/0/MyApp/。一切正常,但通过USB无法看到此文件夹。

外部存储和通过USB访问visibel的文件/文件夹有什么区别吗?用户应该能够将文件下载到他的PC。如何设法通过USB显示我的文件?

1 个答案:

答案 0 :(得分:5)

  

这些文件在可通过USB访问的文件和文件夹中不可见

一旦MediaScannerConnection将它们编入索引,它们就会成为。您可以scanFile()使用MediaScannerConnection来加快发生速度。

另请注意,用户可能需要使用"刷新"或者"重新加载"他们的MTP客户端(例如,Windows资源管理器)中的选项可以查看文件,甚至可能拔掉/重新插入设备,因为某些MTP客户端会缓存目录列表。

  

当我检查appDir时,它有路径/ storage / emulated / 0 / MyApp /。一切正常,但通过USB无法看到此文件夹。

这将是外部存储根目录下的MyApp/目录,至少对于手机而言。对于具有辅助用户的平板电脑,当用户登录平板电脑时,用户可以看到MyApp/目录。 storage/emulated/0/路径是动态的,用于路由您应用的代码以写入正确的位置。

此外,请尽量不要使用getExternalStorageDirectory()并混淆用户的外部存储空间。如果这些是用户应该操作的文件,请尝试将它们放在Environment.getExternalStoragePublicDirectory()指定的位置。