我已经仔细地复制了之前发布的以下代码片段,它可以在模拟器上和我的Nexus 9设备上运行,直到某一点!
但是,我得到的只是一个空的Recent文件夹,我从未到达写入文件的代码。
我需要更改什么才能获得合适的文档树?
private void testDocumentTree() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 42);
}
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
String TAG = "onActivityResult";
if (resultCode == RESULT_OK) {
Uri treeUri = resultData.getData();
DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);
// List all existing files inside picked directory
for (DocumentFile file : pickedDir.listFiles()) {
Log.d(TAG, "Found file " + file.getName() + " with size " + file.length());
}
// Create a new file and write into it
DocumentFile newFile = pickedDir.createFile("text/plain", "My Novel");
try {
OutputStream out = getContentResolver().openOutputStream(newFile.getUri());
out.write("A long time ago...".getBytes());
out.close();
} catch (FileNotFoundException e) {
Log.d(TAG, "File Not Found, reason: ", e);
} catch (IOException e) {
Log.d(TAG,"IOException, reason: ", e);
}
}
}
答案 0 :(得分:4)
其他人提到了DocumentsUI上用户应手动启用的选项。但是还有另一种选择。将这些额外内容添加到您的ACTION_OPEN_DOCUMENT,ACTION_GET_CONTENT,ACTION_CREATE_DOCUMENT或ACTION_OPEN_DOCUMENT_TREE意图中。存储设置上的“浏览”按钮在打开DocumentsUI应用程序时使用这些附加功能我认为第一个足以显示内部存储和SD卡。其他人都很好。
intent.putExtra("android.content.extra.SHOW_ADVANCED", true);
intent.putExtra("android.content.extra.FANCY", true);
intent.putExtra("android.content.extra.SHOW_FILESIZE", true);
答案 1 :(得分:2)
答案 2 :(得分:0)
不确定这是否是您要问的,但在文件夹选择器中,您只看到最近的文件夹,有一个溢出菜单,您可以在显示/隐藏SD卡之间切换。
答案 3 :(得分:0)
对我来说,它在模拟器上工作但在真正的Android 5手机上没有。 我甚至检查了谷歌Android目录选择样本,它也没有工作。
所以,它肯定是一个可以在某些手机上看到它的效果的bug。
向谷歌报告此错误,并等待它修复。然后,您所能做的就是限制在您的应用中访问存储卡,这是您可能不想做的事情。但我认为在谷歌修复它之前我们无法做任何事情。
如果你有任何解决方法,你也可以告诉我。