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

And*_*ord 3 usb storage android file

我使用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();
...
Run Code Online (Sandbox Code Playgroud)

这段代码完美无缺.我可以测试文件是否存在,删除文件,创建其他文件等没有任何问题.

当我检查appDir时,它有路径/storage/emulated/0/MyApp/.一切正常,除了通过USB看不到这个文件夹.

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

Com*_*are 5

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

一旦将它们MediaScannerConnection编入索引,它们就会成为.您可以使用scanFile()on MediaScannerConnection来更快地实现这一点.

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

当我检查appDir时,它有路径/ storage/emulated/0/MyApp /.一切正常,除了通过USB看不到这个文件夹.

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

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