【问题标题】:can't control the initial directory where the SAF UI should start无法控制 SAF UI 应启动的初始目录
【发布时间】:2020-11-25 09:19:02
【问题描述】:

我正在尝试使用 SAF(存储访问框架)保存一个文本文件,但我无法控制它应该保存在哪里,我使用了 Documentation 中的这个方法,如下所示:

private void createFile(Uri pickerInitialUri) {
    Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("text/*");
    intent.putExtra(Intent.EXTRA_TITLE, "new.txt");

    // Optionally, specify a URI for the directory that should be opened in
    // the system file picker when your app creates the document.
    intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, pickerInitialUri);


    startActivityForResult(intent, CREATE_FILE);
}

传递根目录Uri如下:

Uri.parse(Environment.getExternalStorageDirectory().toString())

但无论我解析什么字符串,即使我将 null 作为 Uri 传递,框架 UI 总是从下载开始。

我想将文件保存在根目录中。另外,我想自动保存它而无需任何用户交互。

【问题讨论】:

  • 使用您之前获得的 uri 选择目录或文件。你不能自己制造这些尿。
  • 如果没有至少一次用户交互,您无法使用 SAF 保存。
  • @blackapps 你的意思是我应该从日志中获取 uri 还是通过调试器从 onActivityResult 获取 uri?我不太明白我之前获得的 uri 是什么意思
  • @balckapps 起始目录始终是我上次保存的位置。如果这是我在问题中提到的第一次下载起始目录
  • the starting directory is always where I saved the last time. 是的,如果你什么都不做。重读我的第一条评论。

标签: java android android-10.0 storage-access-framework android-11


【解决方案1】:

引用the documentation for EXTRA_INITIAL_URI:

[额外的] 应该指定一个文档 URI 或带有文档 ID 的树 URI。

“文档 URI”是您之前从 ACTION_OPEN_DOCUMENTACTION_CREATE_DOCUMENT 获得的。 “树 URI”是您之前从 ACTION_OPEN_DOCUMENT_TREE 获得的。 Uri.parse() 两者都不是。

【讨论】:

  • 感谢您的澄清,事实证明 SAF 不适合我的用例。我想通过将带有序列号的文本文件保存在应用程序目录以外的目录中来验证设备,因为如果用户卸载并重新安装应用程序,我希望此文件安全。SAF 不适合,因为此文件是在登录时读取的,并且用户不应该每次登录都导航到该目录。有关如何操作的任何建议我们能做到吗?
  • @mahmoudsfares:抱歉,您正在寻找的并不是现代 Android 版本真正支持的模式。
猜你喜欢
  • 1970-01-01
  • 2018-02-22
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
  • 2016-10-03
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
相关资源
最近更新 更多