我的应用必须创建可以从连接的PC轻松读取/写入/复制的文件。我已经阅读了我能找到的所有内容,并尝试了在线评论和Android文档推荐的所有内容,但我无法让它发挥作用。
我正在成功创建和写入文件。使用ADB的shell我可以看到文件在那里,但是从(例如)Windows我可以看到目录中的每个文件,除了我正在创建的文件。从(比如)Windows复制到Android设备的文件是公开可见的。但我的应用程序创建的文件 - 即使在完全相同的目录中 - 也不是。由于我知道文件存在但可见性是有选择性的,我认为这是一个权限问题。
挖掘更多,我发现Context.MODE_WORLD_READABLE和_WRITABLE但是“这个常量在API级别17中已被弃用”,所以这种方法显然不是可行的方法。我还在现有文件上尝试了File.setReadable和File.setWritable,但都失败并返回false。
是的,该应用具有“android.permission.WRITE_EXTERNAL_STORAGE”(或者它不会写入外部存储)。它可以创建文件,它们只是不公开可见。
我无法找到任何文件创建方法,除了File和Context之外,还有明确创建公共可访问文件的任何规定,如上所述。看起来多年来有多种方法可以做到这一点,但它们已被弃用,不起作用,或者我没有正确使用它们。
那么......在Android的外部存储中创建可公开访问的文件的正确和受支持的方式是什么?谢谢!
编辑:添加了代码。没什么好看的,只是目前概念证明的东西。同样,这可以在指定的目录中成功地在Android上创建文件......但是当通过USB连接时,这些文件对于外部设备是不可见的,“作为相机”或“作为媒体设备”。所有其他目录和文件对外部设备可见,而不是我的应用程序创建的那些。
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
filename = (Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/test.txt");
try {
writer = new FileWriter(filename); // use a FileWriter since we're using a String
} catch (IOException e) {
e.printStackTrace();
}
try {
writer.write(filename);
} catch (IOException e) {
e.printStackTrace();
}
try {
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
结帐getExternalFilesDir。使用它的一个例子:
File file = new File(getExternalFilesDir(null), "DemoFile.jpg");
OutputStream os = new FileOutputStream(file);
os.write(data);
...
答案 1 :(得分:0)
首先,Windows中未显示的文件可能是由MTP连接引起的。我反复体验过,当设备连接到PC时,我创建的文件只有在断开连接并重新连接设备后才能在Windows上看到。
其次,您可以使用File和OutputStream的组合轻松地在外部存储上创建文件:
File file = new File(Environment.getExternalStorageDirectory(), "test.txt");
FileOutputStream stream = new FileOutputStream(file);
//write data
stream.close