我正在使用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显示我的文件?
答案 0 :(得分:5)
这些文件在可通过USB访问的文件和文件夹中不可见
一旦MediaScannerConnection
将它们编入索引,它们就会成为。您可以scanFile()
使用MediaScannerConnection
来加快发生速度。
另请注意,用户可能需要使用"刷新"或者"重新加载"他们的MTP客户端(例如,Windows资源管理器)中的选项可以查看文件,甚至可能拔掉/重新插入设备,因为某些MTP客户端会缓存目录列表。
当我检查appDir时,它有路径/ storage / emulated / 0 / MyApp /。一切正常,但通过USB无法看到此文件夹。
这将是外部存储根目录下的MyApp/
目录,至少对于手机而言。对于具有辅助用户的平板电脑,当用户登录平板电脑时,用户可以看到MyApp/
目录。 storage/emulated/0/
路径是动态的,用于路由您应用的代码以写入正确的位置。
此外,请尽量不要使用getExternalStorageDirectory()
并混淆用户的外部存储空间。如果这些是用户应该操作的文件,请尝试将它们放在Environment.getExternalStoragePublicDirectory()
指定的位置。