显然,“文件选择器”应用未完全实现ACTION_OPEN_DOCUMENT_TREE意图。
让我们说这段代码被执行了:
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.setType("vnd.android.document/directory");
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent, OPEN_DIRECTORY_REQUEST_CODE);
已发出此错误:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.OPEN_DOCUMENT_TREE cat=[android.intent.category.OPENABLE] typ=vnd.android.document/directory flg=0x43 }
与该替代类型“ application / vnd.google-apps.folder”相同
或不包括添加OPENABLE类别的行
或使用intent.setType(DocumentsContract.Document.MIME_TYPE_DIR);
如果执行此代码,则:
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
startActivityForResult(intent, OPEN_DIRECTORY_REQUEST_CODE);
没有错误,但是只有磁盘根目录可供用户选择,因此不会显示云空间。
如果像这样使用ACTION_OPEN_DOCUMENT:
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent, OPEN_FILE_REQUEST_CODE);
云根(我认为仅云端硬盘云域,这是唯一实现SAF的应用程序)并且可以选择文件。
我进行了实验,并实现了存储访问框架。例如,请参见以下问题:
Storage Access Framework - failing to obtain document tree from uri (returned from Drive app)
您可以在其中看到该功能的存在,尽管它有点像黑客,但它指的是创建一个文件夹,而不是选择它(文件夹应该是“文档树”)。
我认为我必须找到正确的mime类型,那会是什么?我看到很多次,当意图的类型或标志错误,但是找到正确的参数时,它就会起作用。
否则,如何正式要求Google使SAF的“文件选择器”应用正确实现自己为Android上的存储访问框架创建的ACTION_OPEN_DOCUMENT_TREE意向的云域? 我希望实际上已经实施了。