首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

尝试获取多个文档时,通过ACTION_OPEN_DOCUMENT的takePersistableUriPermission失败

在使用 ACTION_OPEN_DOCUMENTtakePersistableUriPermission 方法时失败,可能是由于多种原因造成的。以下是可能的原因以及相应的解决方案:

基础概念

ACTION_OPEN_DOCUMENT 是 Android 中用于打开文件选择器的 Intent 动作,允许用户从设备存储中选择一个或多个文档。takePersistableUriPermission 方法用于获取对所选文档的持久权限,这样即使应用退出或重启,也能继续访问这些文档。

可能的原因及解决方案

  1. 权限不足
    • 原因:应用没有足够的权限来获取对文档的持久权限。
    • 解决方案:确保在 AndroidManifest.xml 中声明了 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 权限,并且在运行时请求这些权限(对于 Android 6.0 及以上版本)。
    • 解决方案:确保在 AndroidManifest.xml 中声明了 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 权限,并且在运行时请求这些权限(对于 Android 6.0 及以上版本)。
    • 解决方案:确保在 AndroidManifest.xml 中声明了 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 权限,并且在运行时请求这些权限(对于 Android 6.0 及以上版本)。
  • 文档 URI 不正确
    • 原因:传递给 takePersistableUriPermission 的 URI 可能不正确或不完整。
    • 解决方案:确保从 onActivityResult 中正确获取并传递 URI。
    • 解决方案:确保从 onActivityResult 中正确获取并传递 URI。
  • 文档提供者限制
    • 原因:某些文档提供者可能不允许获取持久权限。
    • 解决方案:检查文档提供者的文档,确认是否支持获取持久权限。

应用场景

ACTION_OPEN_DOCUMENTtakePersistableUriPermission 通常用于需要长期访问用户设备上文件的应用场景,例如:

  • 文件管理器
  • 图片编辑器
  • 备份工具

参考链接

通过以上步骤,您应该能够解决 takePersistableUriPermission 失败的问题。如果问题仍然存在,请检查日志中的详细错误信息,以便进一步诊断问题。

相关搜索:尝试通过Rest调用获取文档时的java.lang.OutOfMemoryError尝试在Mac OS X 10.14.5上通过rbenv安装Ruby时,获取构建失败当“MSBuild的多个安装”时,Dotnet项目转换尝试转换失败。尝试从Angular中的firestore中获取单个文档时出错通过$in使用ID数组更新多个文档时的向上插入问题Firestore事务在获取和设置曾经存在的文档时失败当我尝试通过BeautifulSoup获取<table>时,它变成空的获取任务':app:kaptDebugKotlin‘的执行失败。尝试实现房间组件时尝试通过MailboxSettings.Read选择获取我的MailboxSettings时访问被拒绝尝试通过索引获取元组中的对象时出现"TypeError:' tuple‘object is not callable“错误Python while循环以获取多个输入。两种技术-失败时的情况?尝试使用javaScript在FaunaDB中获取一个集合中的所有文档时遇到的问题为什么我的请求在尝试通过电子邮件获取用户时挂起尝试在使用axios的React中将多个参数传递给get请求时出现获取415错误在Bash中,当循环通过多个数组时,获取正在循环的数组的名称?获取“提供的一个或多个数据系列..”在尝试计算统计数据时尝试使用Swift包管理器通过HTTPS将包添加到我的项目时,身份验证失败由于每个文档每秒1次写入的限制而导致写入失败时,是否会通过错误或重试进行故障恢复?在尝试通过express js发布到API时,获取“不受支持的媒体类型”和“内部服务器错误”尝试在同一个表中的2个列上创建多个内连接时未获取数据
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

AndroidQ兼容性适配指南

MediaStore可以通过Volume Name 获取对应Uri。...借助 SAF,用户可轻松在其所有首选文档存储提供程序中浏览并打开文档、图像及其他文件。用户可通过易用标准界面,以统一方式在所有应用和提供程序中浏览文件,以及访问最近使用文件。...使用SAF选择单个文件 通过Intent.ACTION_OPEN_DOCUMENT调文件选择界面,用户选择并返回一个或多个现有文档,所有选定文档均具有持久读写权限授予,直至设备重启。...在这个过程中通过用户授权Uri,就默认获取了该Uri读写权限,直到设备重启。可以通过保存权限来永久获取该权限,不需要每次重启手机之后又要重新让用户主动授权。...,请参见使用MediaStore修改文件;使用SAF 获取到文件或目录Uri,用户已经授权读写,可以直接使用,但要注意Uri权限时效,请参见使用SAF获取目录&保存授权。

7.1K30

AndroidQ分区存储权限变更及适配实现

(仅当访问其他应用文件) MediaStore 否 下载内容(文档和电子书籍) 无 存储访问框架(加载系统文件选择器 否 您可以使用存储访问框架访问上表中显示每个位置,而无需请求任何权限。...使用文档 如果需要打开企业办公文档或打开另存为 EPUB 文件图书。...通过调用 ACTION_OPEN_DOCUMENT intent 能选择要打开文件, intent 会打开系统文件选择器应用。...显示应用所支持类型文件,intent 中需要包含Intent.EXTRA_MIME_TYPES extra GitHub 上 ActionOpenDocument 示例说明了如何使用 ACTION_OPEN_DOCUMENT...照片中位置信息 我们拍摄照片一般在Exif元数据中包含了位置信息,在Android Q 以前我们可以方便获取到图片位置信息,Android Q 会默认对您应用隐藏此类信息。

1.5K31
  • ContentProvider再探——Document Provider

    概述 通过ContentProvider初探相信你已经知道如何去使用系统提供ContentProvider或者自定义ContentProvider了, 已经基本满足日常开发需求了,有趣是,我在官方文档上看到了另外这几个...存储内容提供了便利,可供访问内容不仅包括:文档,图片,视频,音频,下载,而且包含所有由 由特定ContentProvider(须具有约定API)提供内容。...Client app:一个普通客户端软件,通过触发ACTION_OPEN_DOCUMENT 和/或 ACTION_CREATE_DOCUMENT就可以接收到来自于Document provider返回内容...当客户端触发了ACTION_OPEN_DOCUMENT或ACTION_CREATE_DOCUMENTIntent,就会发生上述交互。...Uri你可以知道什么,而Uri获取则是通过SAF得到

    94630

    SpringBoot中基于MongoDBfindAndModify原子操作实现分布式锁原理详解

    多个客户端同时对同一文档进行操作,MongoDB通过锁机制来确保每个操作顺序和结果都是正确。锁机制通过文档进行加锁来实现,包括读锁和写锁。...读锁允许多个客户端同时读取文档,但写锁则是互斥,即同一间只能有一个客户端持有写锁。...尝试获取锁 当客户端需要获取,它执行以下步骤: 使用findAndModify命令查询locks集合中对应锁文档。...锁重入和超时 重入性:可以通过文档中增加一个重入计数器来实现锁重入性。当客户端尝试重新获取已被自己持有的锁,重入计数器增加。...当需要锁定某个资源,使用findAndModify尝试更新集合中一个文档,设置holder和lockedAt。

    11210

    Android 11 应用兼容性适配,看这篇就够了

    文档基于谷歌Android 11 Developer Preview 4(DP4)版本变更输出 一、兼容性调试工具 Android 11 引入了新工具,用于针对最新版平台中行为变更来测试和调试应用...而Google正在更新 Google Play 政策,以确保应用只在其真正需要获取位置信息才请求授权。...此变更,可以防止app通过访问目录文件返回错误不同,来判断特定app是否已被安装。 3 适配指导 如果仍想要通过SDK接口获取其他app信息,需要在清单文件中声明自己“需要交互app”。...3.5 MAC地址随机分配 1 背景 为了进一步保护用户隐私,Android Q在连接Wi-Fi,默认启用了Mac地址随机化特性,如果 APP不进行适配,使用原来方式获取Mac地址可能是随机生成...如果在不具备此权限情况下尝试访问 APN 数据库,会生成安全异常。

    12.7K42

    「编程架构实战」——Java并发包基石-AQS详解

    当线程获取资源失败(比如tryAcquire试图设置state状态失败),会被构造成一个结点加入CLH队列中,同时当前线程会被阻塞在队列中(通过LockSupport.park实现,其实是等待态)。...方法,若返回true,意味着获取同步状态成功,后面的逻辑不再执行;若返回false,也就是获取同步状态失败,进入b步骤; b.此时,获取同步状态失败,构造独占式同步结点,通过addWatiter将此结点添加到同步队列尾部...(此时可能会有多个线程结点试图加入同步队列尾部,需要以线程安全方 式添加); c.该结点以在队列中尝试获取同步状态,若获取不到,则阻塞结点线程,直到被前驱结点唤醒或者被中断。...addWaiter  为获取同步状态失败线程,构造成一个Node结点,添加到同步队列尾部  先cas快速设置,若失败,进入enq方法 将结点添加到同步队列尾部这个操作,同时可能会有多个线程尝试添加到尾部...对于独占式同步组件来讲,同一刻只有一个线程能获取到同步状态,其他线程都得去排队等待,其待重写尝试获取同步状态方法tryAcquire返回值为boolean,这很容易理解;对于共享式同步组件来讲,同一刻可以有多个线程同时获取到同步状态

    41700

    《Elasticsearch 源码解析与优化实战》第8章:GET流程

    NODE1使用文档ID来确定文档属于分片0,通过集群状态中内容路由表信息获知分片0有三个副本数据,位于所有的三个节点中,此时它可以将请求发送到任意节点,这里它将请求转发到NODE2。...在读取文档可能已经存在于主分片上,但还没有复制到副分片。在这种情况下,读请求命中副分片时可能会报告文档不存在,但是命中主分片可能成功返回文档。...将请求转发到目标节点,如果请求执行失败,则尝试转发到其他节点读取。在收到读请求后,处理过程如下。 1....回复消息中文档顺序与请求顺序一致。如果部分文档读取失败,则不影响其他结果,检索失败doc会在回复信息中标出。...因此update操作可能会导致refresh生成新Lucene分段。. 读失败是怎么处理尝试从别的分片副本读取。

    91431

    Redlock(redis分布式锁)原理分析

    Redlock:全名叫做 Redis Distributed Lock;即使用redis实现分布式锁; 使用场景:多个服务间保证同一刻同一间段内同一用户只能有一个请求(防止关键业务出现并发攻击);...redis选举出一个升级为主redis,造成新主redis没有clientA 设置锁,这是clientB尝试获取锁,并且能够成功获取锁,导致互斥失效; 思考题:这个失败原因是因为从redis立刻升级为主...比如:TTL为5s,设置获取锁最多用1s,所以如果一秒内无法获取锁,就放弃获取这个锁,从而尝试获取下个锁 3.client通过获取所有能获取锁后时间减去第一步时间,这个时间差要小于TTL时间并且至少有...,则时钟漂移非常大) RedLock失败重试 当client不能获取,应该在随机时间后重试获取锁;并且最好在同一刻并发把set命令发送给所有redis实例;而且对于已经获取client在完成任务后要及时释放锁...TTL时间,并且获取成功锁个数要 在总数一般以上:N/2+1 3.尝试获取每个redis实例锁时间要 远小于TTL时间 4.尝试获取所有锁失败后 重新尝试一定要有一定次数限制 5.在redis崩溃后

    2.1K01

    Redlock(redis分布式锁)原理分析

    Redlock:全名叫做 Redis Distributed Lock;即使用redis实现分布式锁; 使用场景:多个服务间保证同一刻同一间段内同一用户只能有一个请求(防止关键业务出现并发攻击);...redis选举出一个升级为主redis,造成新主redis没有clientA 设置锁,这是clientB尝试获取锁,并且能够成功获取锁,导致互斥失效; 思考题:这个失败原因是因为从redis立刻升级为主...比如:TTL为5s,设置获取锁最多用1s,所以如果一秒内无法获取锁,就放弃获取这个锁,从而尝试获取下个锁 3.client通过获取所有能获取锁后时间减去第一步时间,这个时间差要小于TTL时间并且至少有...,则时钟漂移非常大) RedLock失败重试 当client不能获取,应该在随机时间后重试获取锁;并且最好在同一刻并发把set命令发送给所有redis实例;而且对于已经获取client在完成任务后要及时释放锁...TTL时间,并且获取成功锁个数要 在总数一般以上:N/2+1 3.尝试获取每个redis实例锁时间要 远小于TTL时间 4.尝试获取所有锁失败后 重新尝试一定要有一定次数限制 5.在redis崩溃后

    7.8K43

    【编程架构实战】——Java并发包基石-AQS详解

    当线程获取资源失败(比如tryAcquire试图设置state状态失败),会被构造成一个结点加入CLH队列中,同时当前线程会被阻塞在队列中(通过LockSupport.park实现,其实是等待态)。...(此时可能会有多个线程结点试图加入同步队列尾部,需要以线程安全方 式添加); c.该结点以在队列中尝试获取同步状态,若获取不到,则阻塞结点线程,直到被前驱结点唤醒或者被中断。...addWaiter  为获取同步状态失败线程,构造成一个Node结点,添加到同步队列尾部  先cas快速设置,若失败,进入enq方法 将结点添加到同步队列尾部这个操作,同时可能会有多个线程尝试添加到尾部...对于独占式同步组件来讲,同一刻只有一个线程能获取到同步状态,其他线程都得去排队等待,其待重写尝试获取同步状态方法tryAcquire返回值为boolean,这很容易理解;对于共享式同步组件来讲,同一刻可以有多个线程同时获取到同步状态...1.当返回值大于0,表示获取同步状态成功,同时还有剩余同步状态可供其他线程获取; 2.当返回值等于0,表示获取同步状态成功,但没有可用同步状态了; 3.当返回值小于0,表示获取同步状态失败

    44100

    【编程架构实战】——Java并发包基石-AQS详解

    当线程获取资源失败(比如tryAcquire试图设置state状态失败),会被构造成一个结点加入CLH队列中,同时当前线程会被阻塞在队列中(通过LockSupport.park实现,其实是等待态)。...(此时可能会有多个线程结点试图加入同步队列尾部,需要以线程安全方 式添加); c.该结点以在队列中尝试获取同步状态,若获取不到,则阻塞结点线程,直到被前驱结点唤醒或者被中断。...addWaiter  为获取同步状态失败线程,构造成一个Node结点,添加到同步队列尾部  先cas快速设置,若失败,进入enq方法 将结点添加到同步队列尾部这个操作,同时可能会有多个线程尝试添加到尾部...对于独占式同步组件来讲,同一刻只有一个线程能获取到同步状态,其他线程都得去排队等待,其待重写尝试获取同步状态方法tryAcquire返回值为boolean,这很容易理解;对于共享式同步组件来讲,同一刻可以有多个线程同时获取到同步状态...1.当返回值大于0,表示获取同步状态成功,同时还有剩余同步状态可供其他线程获取; 2.当返回值等于0,表示获取同步状态成功,但没有可用同步状态了; 3.当返回值小于0,表示获取同步状态失败

    34900

    最新更新 | Kafka - 2.6.0版本发布新特性说明

    [KAFKA-9603] - Streams应用程序中打开文件数量不断增加 [KAFKA-9605] - 如果在致命错误后尝试完成失败批次,EOS生产者可能会抛出非法状态 [KAFKA-9607]...更改最大消息字节数,副本访存器可以将分区标记为失败 [KAFKA-9620] - 任务吊销失败可能会导致剩余不干净任务 [KAFKA-9623] - 如果正在进行重新平衡,则流将在关闭期间尝试提交...KAFKA-10123] - 从旧经纪商处获取,消费者中回归重置偏移量 [KAFKA-10134] - Kafka使用者升级到2.5后重新平衡过程中高CPU问题 [KAFKA-10144] -...[KAFKA-10165] - 百分位数度量标准内存泄漏 [KAFKA-10166] - 测试中看到过多TaskCorruptedException [KAFKA-10167] - 流EOS-测试版不应尝试获取已提交读最终偏移...[KAFKA-9392] - 记录并添加测试以匹配单个/多个资源deleteAcl [KAFKA-9670] - 基准测试和优化MetadataResponse准备 [KAFKA-10003] - 通过

    4.8K40

    Dubbo配置问题-2

    1.多版本支持 当服务提供者提供服务接口出现不兼容升级,可以设置版本号,使用多个版本号(version)进行过渡。...,我们在客户端一定要指定版本号哦.否则就是ERROR 2.主机绑定过程分析 我们服务端在发布url对于ip获取经历了许多过程....具体在源码中体现.在dubbo-config模块ServiceConfig源码中有一列判断和尝试.即在生成绑定主机时候,会通过一层一层判断和不断尝试,直到获取到合法ip地址。| 1....为了减少某一个节点故障影响范围,所以我们才需要去构建容错服务,来优雅处理这种中断响应结果. Dubbo提供了6种容错机制,官方文档 1.failsafe 失败安全,出现异常,直接忽略。...设置并行数, 并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。

    47620

    防止取消订单误支付Bug分布式锁方案设计

    分布式锁作用为了解决上述问题,我们可以引入分布式锁。分布式锁是一种用于在多个节点上协调并发访问共享资源机制。在本文中,我们将使用分布式锁来确保在取消订单不会同时进行支付操作。...def acquire_lock(lock_name, timeout): # 使用SETNX命令尝试获取锁 lock_acquired = redis_client.setnx(lock_name...:{order_id}' try: # 尝试获取锁,设置超时时间为10秒 if acquire_lock(lock_name, 10): # 执行取消订单操作...# 取消订单完成后释放锁 release_lock(lock_name) else: # 获取失败,可能有其他支付操作正在进行...# 处理获取失败逻辑 pass except Exception as e: # 处理异常情况 pass结论通过设计和实现分布式锁方案

    33550

    Android11 (API30)适配

    Android 11 应用兼容性适配指导 本文档基于谷歌Android 11 Developer Preview 4(DP4)版本变更输出,后续Beta版如有新变更和特性,我们会刷新文档相关章节内容...而Google正在更新 Google Play 政策,以确保应用只在其真正需要获取位置信息才请求授权。...此变更,可以防止app通过访问目录文件返回错误不同,来判断特定app是否已被安装。 3 适配指导 如果仍想要通过SDK接口获取其他app信息,需要在清单文件中声明自己“需要交互app”。...3.5 MAC地址随机分配 1 背景 为了进一步保护用户隐私,Android Q在连接Wi-Fi,默认启用了Mac地址随机化特性,如果 APP不进行适配,使用原来方式获取Mac地址可能是随机生成...如果在不具备此权限情况下尝试访问 APN 数据库,会生成安全异常。

    7.8K11

    MySQL 最佳实践:程序端连接池配置

    --定义在从数据库获取新连接失败后重复尝试次数。...--如果为false,则获取连接失败将会引起所有等待连接池来获取连接线程抛出异常,但是数据源仍有效保留,并在下次调用getConnection()时候继续尝试获取连接。...如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。...具体原理与代码 Sample 参考官方文档。 连接池配置可以动态修改,需要调用对应 Set 方法来设置,也可以通过对应 Get 方法来获取当前设置。...multiStatements:设置是否支持在一次查询中执行多个语句,执行多个语句仅返回第一个语句结果,存在 SQL 注入风险,默认值为 0,推荐使用默认值。

    4.9K91

    Java8 原子弹类之LongAdder源码分析add使用场景LongAdder是否能够替换AtomicLong

    官方文档说明 从关键方法 add 包含了一个Cell数组,Striped64一个内部类 Padded variant of AtomicLong supporting only raw...如果cells已经初始化并且cas操作失败,则运行if内部语句。...* 通过cas实现自旋锁,用于扩大或者初始化cells */ transient volatile int cellsBusy; 从以上分析来看,longAccumulate就是为了尽量减少多个线程更新同一个...因为LongAdder在更新数值并非对一个数进行更新,而是分散到多个cell,这样在多线程情况下可以有效嫌少冲突和压力,使得更加高效。...优点:由于 JVM 会将 64位double,long 型变量读操作分为两次32位读操作,所以低并发保持了 AtomicLong性能,高并发下热点数据被 hash 到多个 Cell,有限分离,通过分散提升了并行度

    1.5K60
    领券