问题标签 [documentfile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
139 浏览

android - MtpDevice.importFile 和 DocumentFile

MtpDevice.importFile(int objectHandle, String destPath)在 4.4 及更高版本上失败。有没有办法从带有 SD 卡写锁的 MtpDevice 导入?

0 投票
0 回答
205 浏览

android - 使用 DocumentFile 以编程方式安装 apk

这就是我安装apk文件的方式:

现在我想从 sdcard 安装一个 apk 文件,我通过存储访问框架(来自 Kitkat)获取 uri,但代码不起作用。

带有 uri1 的代码有效,但不适用于 uri2

任何解决方法?谢谢

0 投票
2 回答
919 浏览

java - 使用 MediaScanner 连接和从 TreeUri 获取 Lollipop 版本的 DocumentFile URI 刷新图库

您好我正在尝试通过启动扫描来刷新图库。对于运行 Kitkat 和更高版本的设备,我正在使用 mediascannerconnection。但是 mediaScannerConnection 需要绝对路径才能进行扫描。我所拥有的是一个DocumentFile,它似乎没有任何方法来获取它的绝对路径。

以下是我正在使用的代码:

要使用新的棒棒糖 API 获得写入文件夹的权限——>将选定的 URI 保存到全局变量——>隐藏逻辑(创建/删除“.nomedia”文件)。

上面的代码完美运行,并在所需文件夹中创建/删除“.nomedia”文件。

现在,当我尝试告诉画廊该文件夹的文件已更改时。Gallery 无法选择更改。

下面是刷新/请求扫描的代码。

MediaScanner 类如下:

但是代码不会刷新图库,我仍然可以在图库中看到该文件夹​​。然而,该文件夹会在 10 到 20 分钟后消失,这可能是系统刷新所致。

最后我想要的是

  • 无论如何我可以获得 DocumentFile 实例的路径吗?这样我就可以直接将它传递给 mediascanner 路径

  • 或者是否有任何其他方法可以请求扫描棒棒糖中的特定文件夹。特定文件夹位于 SDCARD 中,我只知道它的 URI 而不是实际路径。

非常感谢任何帮助。

0 投票
1 回答
1620 浏览

android - 从 ACTION_OPEN_DOCUMENT_TREE 根 Uri 为 android 5.0 DocumentFile 构造 Uri

我可以从 Storage Access Framework 的 OPEN_DOCUMENT_TREE 成功获取基本路径 Uri。

如何使用为 Android 5.0 (Lollipop) 提供的新 SD 卡访问 API?

但是 android 5.0 中有一个错误/功能会破坏本文中引用的递归:

在 Lollipop 上使用 Android 存储访问框架列出文件时出现错误

使用 File.listFiles() 返回一个 Null 数组。

我已经知道目标文件夹/文件的完整路径。我想构造一个有效的 DocumentFile Uri,它具有 onActivityResult 中返回的根 Uri 的权限。

我想附加到根 Uri 路径或构建一个与根 Uri 具有相同权限的新 Uri 以访问目标文件夹/文件。

0 投票
6 回答
16428 浏览

android - 来自树 URI 的 Android 5.0 DocumentFile

好吧,我已经搜索和搜索了,没有人有我的确切答案,或者我错过了。我让我的用户通过以下方式选择目录:

在我的活动中,我想捕获实际路径,这似乎是不可能的。

我选择的文件夹位于:

我尝试了以下所有方法来获取确切的路径名,但无济于事。

基本上我需要/tree/1AF6-3708:变成/storage/emulated/0/或每个设备都称之为存储位置。所有其他可用选项/tree/1AF6-37u08:也会返回。

我想这样做有两个原因。

1)在我的应用程序中,我将文件位置存储为共享首选项,因为它是用户特定的。我有相当多的数据将被下载和存储,我希望用户能够将其放置在他们想要的地方,特别是如果他们有额外的存储位置。我确实设置了默认值,但我想要多功能性,而不是专用位置:

2)在 5.0 中,我想让用户获得对该文件夹的读/写权限,这似乎是唯一的方法。如果我可以从可以解决此问题的字符串中获得读/写权限。

我能找到的所有解决方案都与 Mediastore 有关,这对我没有帮助。我一定是在某处遗漏了一些东西,或者我一定是对它上釉了。任何帮助,将不胜感激。谢谢。

0 投票
1 回答
407 浏览

android - DocumentFile - 直接访问底层文件

是否有可能从 中获取File对象DocumentFile?通过一些小技巧,我可以获得文件的真实路径,但File不允许该类在那里读/写......

我需要从 USB OTG 或辅助存储访问媒体文件,我需要以下功能:

  • 从图像中获取 exif 数据 => 我真的需要它
    • 获取图像的位置
    • 获取图像的真实创建日期
    • 实际上,为了显示目的,我需要所有 exif 数据
  • 旋转图像的能力(这可以通过创建临时图像,删除旧图像并重命名临时图像来实现)

关于如何实现这一目标的任何想法?

0 投票
1 回答
710 浏览

android - 如何管理所有版本中的所有本地存储(主存储、辅助存储、sd 卡、usb)

介绍

管理主存储文件+辅助存储文件(仅限本地):我将列出我已经拥有的所有信息,并希望您扩展它们或纠正我,以便这个问题希望成为一个概述,总结某人必须知道的所有主要信息在开始使用本地存储之前。我相信很多人都在寻找这样的概述......

概述

通常你有以下存储:

  • 主存储(始终可直接访问,主要在内部存储上,但取决于手机制造商)
  • 辅助存储(android <=4.3 可直接访问)
  • 其他外部存储,例如 USB OTG...

提出以下问题:

  1. 如何找出所有可用的本地存储 + 找出类型(主要、次要、内部、sd 卡、usb)?

  2. 列出存储中的所有可用文件

    2.1 哪​​些存储将通过MediaStore?

    2.2 如何通过 ? 获取所有文件MediaStore

    2.3 如何在没有 的情况下获取所有文件MediaStore

  3. 如何编辑这些存储上的文件?

我已经知道的大部分事情,主要是我的问题是基于媒体存储索引的数据,如何找出可用的存储,如何识别存储......所以我发布了一个回答大部分问题的答案部分,并且还显示每个问题的状态 <=> android 版本对,以便很容易看到仍然缺少哪些信息

状态 - 如果您知道更多或我错了,请随时扩展/更正我对问题的回答

安卓 < 4.4

  • 问题 1 - 部分已知 ✖</li>
  • 问题 2.1 - 未知 ✖</li>
  • 问题 2.2 - 已知 ✔</li>
  • 问题 2.3 - 已知 ✔</li>
  • 问题 3 - 已知 ✔</li>

安卓 4.4

  • 问题 1 - 部分已知 ✖</li>
  • 问题 2.1 - 未知 ✖</li>
  • 问题 2.2 - 已知 ✔</li>
  • 问题 2.3 - 部分已知 ✖</li>
  • 问题 3 - 部分已知 ✖</li>

安卓 >=5

  • 问题 1 - 部分已知 ✖</li>
  • 问题 2.1 - 未知 ✖</li>
  • 问题 2.2 - 已知 ✔</li>
  • 问题 2.3 - 已知 ✔</li>
  • 问题 3 - 已知 ✔</li>
0 投票
2 回答
1322 浏览

android - 存储访问框架 - 设置本地 DocumentFile 的最后修改日期

我想将文件从内部存储复制或移动到 SD 卡。我通过存储访问框架(SAF)和DocumentFile类来做到这一点......

复制是基于流的,并且DocumentFile没有File设置上次修改日期的类的功能。

我知道,我将文件移动/复制到 sd 卡,所以我知道我创建了一个本地文件。有了这些信息,是否有可能更新基础文件的最后修改日期DocumentFile

似乎您无法在不丢失上次修改日期的情况下将文件从内部存储移动/复制到 sd 卡...

阅读 - 工作

写作 - 不工作

这失败了一个java.lang.UnsupportedOperationException: Update not supported例外......

0 投票
1 回答
860 浏览

android - Android Marshmallow:SAF 写入的文件不会立即写入

我正在使用 SAF(存储访问框架)将文件写入 SD 卡。在 Marshmallow 上,文件的写入和更新实际上有很大的延迟(大约 10 秒)。

当我使用例如:

顺便提一句。当我通过方法检查长度时File.length(),它返回相同的值。

有没有办法立即写出来?或者我可以设置一些监听器吗?否则我必须定期检查尺寸,我不想这样做。实际上,我不想在文件写入后等待 10 秒。

0 投票
1 回答
1815 浏览

android - Correctly delete DocumentFile (respecting the MediaStore)

I have a DocumentFile defined in following two ways:

I can delete a document file from the sd card via following methods:

  1. documentFile.delete();
  2. DocumentsContract.deleteDocument(contentResolver, documentFileUri);

But non of the above methods will delete the corresponding entry from the MediaStore.

What's the correct way to handle that? If I use the ContentProvider for deleting a local file, it will remove the File AND the row from the database (contentResolver.delete(localFileUri, null, null);). I would expect the same to happen if I use the DocumentsContract but it does not happen...

What I want

I want to instandly update the MediaStore. Normally I would call contentResolver.delete(documentFileUri, null, null); but this will fail with an exception that says, that the uri does not support deletions...

Question

Is there a more efficiant way to do it than my workaround?

Workaround

Currently I use following function to instantly update the media store after I deleted a DocumentFile: