【问题标题】:How to create files/folders in external storage that are accessible via USB?如何在可通过 USB 访问的外部存储中创建文件/文件夹?
【发布时间】:2014-08-20 22:40:39
【问题描述】:

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

我认为这些文件和文件夹将代表 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 显示的文件/文件夹之间有区别吗?用户应该能够将文件下载到他的 PC 上。如何让我的文件通过 USB 可见?

【问题讨论】:

  • 只需尝试将 getAppPuplicExternalStorageDir() 更改为其他字符串路径..
  • 谢谢,但我不明白你的意思。能详细解释一下吗?

标签: android file usb storage


【解决方案1】:

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

一旦MediaScannerConnection 将它们编入索引,它们就会出现。您可以在MediaScannerConnection 上使用scanFile() 来加快实现速度。

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

当我检查 appDir 时,它的路径是 /storage/emulated/0/MyApp/。一切正常,除了这个文件夹通过 USB 不可见。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 2015-10-16
    相关资源
    最近更新 更多