首页 > 解决方案 > 有什么方法可以让 Android ACTION_OPEN_DOCUMENT_TREE 告诉用户我们为什么需要选择文件夹?

问题描述

我们的应用程序是电子书阅读器,特别是针对少数民族语言使用者的早期识字材料。我们的合作伙伴分发电子书的主要方式之一是使用 SD 卡。因此,我们的应用程序需要读取 SD 卡上特定文件夹(“BloomExternal”)的权限。在 Android 11 中,我们只能通过 SAF 做到这一点。基本上是这样的:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, uriOfBloomExternal);

然后我们启动该意图,如果用户单击正确的按钮而没有先导航到其他地方,则返回值会为我们提供所需的权限。

问题是,我们应用程序的典型用户是一个刚开始学习阅读的孩子,他们不会说广泛使用的语言并且阅读能力很差。用户可能不了解文件夹是什么,更不用说为什么她此时需要点击“使用此文件夹”。即使老师在帮助她,也可能不清楚需要做什么。

因此,如果有某种方法(至少)将我们自己的解释放入对话框中,那就太好了……例如,“请单击下面的按钮,授予 Bloom Reader 访问 SD 卡上书籍的权限”。

我从文档中认为我们可以这样做

intent.putExtra(DocumentsContract.EXTRA_PROMPT, ...message);

但这样做完全没有效果。

如果我们可以绕过选择器并直接进入“允许 Bloom Reader 访问 BloomExternal 中的文件”(单击“使用此文件夹”后出现的消息),那就更好了。在这种情况下,用户没有理由选择其他文件夹。同样,如果我们至少可以尝试解释为什么需要此许可,那就太好了,尽管我们的许多读者可能不理解该解释,因为将其本地化为他们知道的语言是不可行的,而且他们不是流利的读者。

我们目前不太令人满意的解决方案是在启动 ACTION_OPEN_DOCUMENT_TREE 意图之前建立一个对话框。它有一个可本地化的解释和一张图片,鼓励用户在下一个屏幕中点击必要的按钮。现在用户必须点击两次,当然按钮的外观在下一个操作系统版本中可能会有所不同,从而使我们的对话框过时了。

欢迎任何更好的想法。

(当然,如果Android的制造商能够提供某种方法来识别一个文件夹不包含任何机密信息,那么这样的文件夹也可以被任何想要阅读的应用程序读取而不会打扰用户。然后我们可以制造带有如此标记的 BloomExternal 文件夹的 SD 卡,并避免像这样混淆我们的用户。)

标签: android

解决方案


推荐阅读