【发布时间】:2021-12-03 04:06:04
【问题描述】:
通过系统文件管理器后,我制作的文件管理器能够在通过 ACTION_GET_CONTENT 询问时(例如,通过 K9 电子邮件客户端)返回一个文件:
Uri uri = SearchOut.getUriFromFile(this, context.getPackageName(), file);
Intent intent = new Intent();
intent.setDataAndType(uri, getContentResolver().getType(uri));
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
setResult(Activity.RESULT_OK, intent);
K9正常获取文件。
我的文件管理器也可以共享多个文件:
ArrayList<Uri> urilist = ...
Intent shareIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, urilist);
shareIntent.setType("application/octet-stream");
context.startActivity(Intent.createChooser(shareIntent, "Sharing files..."));
然后我可以打开K9并加载所有文件。
那么,当通过 ACTION_GET_CONTENT 请求几个文件时,如何将它们返回给 K9?
正如我上面写的,我知道如何用 K9 发送多个文件,或者当 K9 询问时返回 1 个文件,但我不知道如何在 K9 询问时返回多个文件。系统文件管理器确实返回了几个文件,K9 愉快地加载了所有文件。
【问题讨论】:
-
but I don't know how to return several files when K9 asks.“当 K9 询问时”发生了什么?你的意思是?这样的问题看起来如何?谁被问到?它与行动获取内容有什么关系?你的帖子很混乱。 -
所以你说 K9 使用 ACTION_GET_CONTENT 和 startActivityForResult 并且用户选择了你的应用程序并且用户选择了几个文件,现在你想将 uris 转移到 K9?将它们放在返回 uri 中,就像您在应用使用该操作时从 onActivityResult 中的意图中提取它们一样。
-
对不起,如果我不清楚。 “当 K9 询问时”是指当您按下附件按钮时请求的操作。根据 K9 开发人员的说法,这是一个标准的 ACTION_GET_CONTENT 意图。此意图在新版本的 Android 中由系统处理,但我的系统文件管理器允许我通过在“使用另一个应用程序浏览文件”选项中选择它来使用我的文件管理器。如果我然后仅选择 1 个文件,则它适用于上述代码。但我不知道如何为多个文件构建意图,因为
intent.setDataAndType不接受 URI 列表。 -
是的,
getIntent().getAction()返回android.intent.action.GET_CONTENT。 -
@blackapps 抱歉,我不明白您在第二个回答中的建议。我尝试使用
ArrayList<Uri>、new Intent(Intent.ACTION_SEND_MULTIPLE)和shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, urilist)建立使用setResult(Activity.RESULT_OK, intent)返回它的意图,但K9 没有加载文件。换句话说,我需要建立一个意图作为我写的第一个意图,但要针对多个文件而不是一个。