问题标签 [saf]
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.
android - 如何从 Android 11 和 targetApi 30 上的文档 uri 获取真实的文件路径或文件名
Android 11
targetApi 30
不请求READ_EXTERNAL_STORAGE或WRITE_EXTERNAL_STORAGE
使用SAF api 来获取这样的 uri:
“content://com.android.providers.media.documents/document/document%3”
并像这样解析 uri:
我在低于 android 11 的手机上得到正常值,但在 android 11 手机上得到空值
好吧,我想获取文件的真实路径或名称
谁能帮帮我?<br />谢谢!
android - Whatsapp 分享 Android 11 范围存储
我在 Android 10 之前使用此代码没有问题。但现在在 Android 11 下它不再工作了。我认为 Whatsapp 无法读取从原始资源创建的应用目录中的 mp3。
我的技能不是很好,我了解 SAF 或 MediaStore。我认为这是问题所在,一般来说,WhatsApp 没有我的应用目录的权限。所以我只是不想将它下载到 Download/ 或类似的共享存储路径。但是怎么做?
目标 SDK 为 30
我的代码:
谢谢您的帮助!
android - 如何从下载文件夹中选择的 Uri 获取绝对路径?
从下载文件夹中选择一些文件时,我想通过 Uri 获取绝对路径。API 级别 21+。目前我有这样的错误:
或者这个:
取决于我如何访问这些文件。我怎样才能正确地做到这一点?您可以提供一些常用的文档链接。谢谢。
这是我目前的解决方案:
android - 如何将 FLAG_GRANT_PREFIX_URI_PERMISSION 与 Android 存储访问框架一起使用?
我想使用 Android 中的存储访问框架 (SAF) 来获取大量文件 (>600) 的 uri 并将其保存在本地数据库中。
所以要获得 1 个文件的 uri,我调用:
然后在 onActivityResult 中,我坚持授予的权限:
但我知道Android 11 将您可以保留的权限限制为 512 。所以我想我可以使用标志Intent.FLAG_GRANT_PREFIX_URI_PERMISSION来授予对 uri 具有前缀匹配的文件的访问权限,从而减少持久化 uri 权限的数量。
但我不知道如何使用这个标志。我使用它的方式,我无法读取前缀匹配的文件。
所以我的问题是:
应该如何使用标志 Intent.FLAG_GRANT_PREFIX_URI_PERMISSION?
android - Android 11 - 如何访问 android/data/an app 目录
我想访问 android/data 中的 Chrome 浏览器目录,然后将文件(TXT)从资产复制到该文件夹
1.如何在Android 11中获得权限
2.获得许可后如何将资产文件夹中的任何文件复制到该目录
请给我一个像这样工作的代码
截图上方应用链接:https: //play.google.com/store/apps/details?id=eu.tsoml.graphicssettings
android - 共享使用 SAF 创建的文件
我在 Android 11 上遇到的问题如下:我的应用正在从 Internet 下载文件(例如图像)。该应用程序首先让用户使用 Intent.ACTION_OPEN_DOCUMENT_TREE 选择文件夹来存储文件。此步骤使应用程序 SAF 可以访问文件夹以创建文件并下载它。接下来我想让用户使用另一个意图打开图像:
(intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 没有帮助)但是如果其他应用程序尝试打开文件,我会遇到不同的错误:
从意图解析文件名时未找到 com.google.android.apps.photos 的权限授予或错误:权限拒绝:从 ProcessRecord{731d51b 4366:com.rhmsoft.edit/u0a277} 打开提供程序 com.android.externalstorage.ExternalStorageProvider( pid=4366, uid=10277) 要求您使用 ACTION_OPEN_DOCUMENT 或相关 API 获取访问权限
好像是第22条?我只使用 uri(我没有任何文件,也不需要它)但我无法共享使用 SAF 创建的文件?
非常感谢!
android - SAF(存储访问网络)自定义选项
我正在使用存储访问框架 (SAF):
我正在使用以下额外内容:
我的问题是,配置某些 SAF 选项的这些附加功能记录在哪里?我想将文件名显示为默认值,因为拇指无法显示 svg 文件的预览并且它令人困惑(这是默认值)。
android - 为什么 DocumentsContract.getTreeDocumentId(uri) 给我 Uri 参数的父级的文档 ID?
该应用程序使用ACTION_OPEN_DOCUMENT_TREE将用户发送到 SAF 选择器:
在onActivityResult中,我们获取持久权限并存储 Uri 的字符串:
我们在需要时重新创建树 Uri:
我们想要列出文件,我们可以使用此处显示的模式。
但是,只有当目录恰好是存储卷中的顶级目录时,这才会按预期工作。如果用户选择的目录不是卷根的直接子目录,那么当我们尝试时DocumentsContract.getTreeDocumentId(rootUri)
,它返回的不是该 URI 的文档 ID,而是卷根之前其最高父级的文档 ID!
打印重建的 Uri 的日志调用给出以下输出:
解析的 dir uri:/tree/primary:a test dir/a child test dir/3rd level dir
但是另一个打印文档 ID 的日志调用会打印:
theDocToReturnChildrenFor:主要:测试目录
我在做吗?这是Android错误吗?我注意到这个问题描述了这种方法的完全相同的行为。通过遵循既定的递归列表模式可以解决该问题,但是,该用户说:
几乎就像 getTreeDocumentId(rootUri) 正在返回 getRootId(rootUri) 应该返回的内容。
这种方法的文档没有帮助,它们很简短并且有错字,意思不清楚。DocumentsContract.getTreeDocumentId 文档。
该应用的目标SDK为30。设备Android版本也是api 30(Android 11)。
如果有人可以帮助我为用户选择的目录获取正确的文档 ID,我将不胜感激。
android - 如何使用其他应用程序打开 /Android/data 中的文件?
Android 11 之后,我们无法直接使用 File I/O访问Android/data目录。通过使用SAF,我现在可以使用 DocumentFile 来遍历我想要的文件,但是当我想用另一个应用程序打开文件时,我发现我做不到。即使我传入了正确的 Uri 参数,其他应用程序也无法访问该文件,因为它没有权限,我可以理解。但是我找到了一个叫“MT Manager”的应用,我惊讶的发现它可以打开数据目录下任意文件夹中的文件,并可以使用其他第三方应用,这太神奇了,我完全看不懂。请帮忙,你知道该怎么做吗?
此代码对普通目录下的文件有效,但在Android 11之后的Android/data目录下无效。
这就是我找到的MT 经理
我能想到一个不太聪明的方法,就是将sdcard/Android/data目录下的文件复制到sdcard目录下,然后调用上面的方法。这有效,但还不够好。我不知道那是什么。如何实现呢,他的效果看起来很不错。
android - 我使用存储访问框架浏览文件链接f.cfg,当你选择文件时,应用程序需要自动加载另一个文件,如f.dat,如何?
在 Android Studio 中:
此应用程序必须使用 COMTRADE 文件。COMTRADE 文件是 *.cfg *.dat 和 *.rio 文件。例如,(user.cfg、user.dat 和 user.rio)。主文件是 *.cfg 文件,所以用户必须通过 SAF 浏览才能找到 *.cfg 文件,当用户选择此文件时,应用程序必须自动加载其他文件(*.dat 和 *.rio)。
我不能<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
用于 30 级的 android
所以我必须使用存储访问框架,通过下面的代码用户浏览 *.cfg 文件并选择像 user.cfg 这样的文件
然后 SAF 返回该 user.cfg 文件的 URI,并且应用程序没有要加载的其他文件的任何 URI。
请帮助我,我该怎么做?谢谢。