热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ContentResolver操作uri权限问题

在Android中使用ContentResolver通过uri代开输入流:ContentResolvercontentResolvergetContentResol

在Android中使用ContentResolver通过uri代开输入流:

ContentResolver contentResolver = getContentResolver();
InputStream inputStream = contentResolver.openInputStream(uri);

报了以下错误:

java.lang.SecurityException: Permission Denial: reading com.android.externalstorage.ExternalStorageProvider uri content://com.android.externalstorage.documents/document/primary%3ADownload%2Fxxx from pid=15575, uid=10079 requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission()

或报

Caused by: java.lang.SecurityException: UID 10173 does not have permission to content://com.android.fileexplorer.myprovider/external_files/Android/data/com.tencent.mobileqq/Tencent/QQfile_recv/6.%E5%B9%BF%E5%B7%.pdf [user 0]

查看官方文档:

在这里插入图片描述
当接收uri的activity销毁之后,这个uri也就失去权限,它是跟随接收它的activity生命周期的,那么我们只需要在接收的activity销毁之前,将权限传递给其他的activity即可:

Intent intent = new Intent(MainActivity.this, BActivity.class);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setDataAndType(uri,Intent.ACTION_OPEN_DOCUMENT);
intent.setType(Intent.ACTION_CREATE_DOCUMENT);
startActivity(intent);

注意:


  1. activity只能逐级传递权限,比如你的跳转流程是a-》b-》c,需要每次跳转都使用上面的方法。
  2. 在跳转过程中确保在其他地方intent的flags没被修改,比如在前面做了intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION),后面的步骤中可能需要用到其他的flags,务必要使用addFlags而不能用setFlags,因为setFlags会把前面设置的给覆盖掉!

以上是一个URI传递权限的情况,那如果是一个URI集合呢,要怎么传递,比如:

List<Uri> uris &#61; intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);

要想把uris的权限传递到下一个activity&#xff0c;也比较简单&#xff0c;只需要这么做&#xff1a;

Intent intent &#61; new Intent(MainActivity.this, BActivity.class);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
intent.setType(Intent.ACTION_CREATE_DOCUMENT);
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
startActivity(intent);

注意&#xff1a;如果少了intent.setAction(Intent.ACTION_SEND_MULTIPLE)&#xff0c;则报错&#xff1a;java.lang.SecurityException: Permission Denial: reading com.android.externalstorage.ExternalStorageProvider uri content://com.android.externalstorage.documents/document/primary%3ADownload%2Fxxx from pid&#61;15575, uid&#61;10079 requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission()


推荐阅读
  • Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Loope ... [详细]
  • 自然语言处理(NLP)——LDA模型:对电商购物评论进行情感分析
    目录一、2020数学建模美赛C题简介需求评价内容提供数据二、解题思路三、LDA简介四、代码实现1.数据预处理1.1剔除无用信息1.1.1剔除掉不需要的列1.1.2找出无效评论并剔除 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • http:blog.csdn.netzeo112140articledetails7675195使用TCPdump工具,抓TCP数据包。将数据包上传到PC,通过Wireshark查 ... [详细]
  • 本文介绍了 Android 开发中常用的滚动视图组件 ScrollView 和 HorizontalScrollView 的基本用法和注意事项,帮助开发者更好地处理屏幕内容超出显示范围的情况。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 本文详细介绍了Apache POI库在处理Word (.docx) 文件时的核心模块XWPFDocument及其主要功能。文章涵盖了文档的段落、表格、页眉和页脚的处理方法,并提供了具体的代码示例。 ... [详细]
  • 本文详细介绍了 Android 开发中常用的单位 dip(设备独立像素)、px(像素)、pt(点)和 sp(可缩放像素),并解释了它们在不同屏幕密度下的应用。 ... [详细]
  • RocketMQ 运维监控实践指南
    本文详细介绍了如何实现 RocketMQ 的运维监控,包括监控平台的搭建、常用运维命令及其具体用法。适合对 RocketMQ 监控感兴趣的读者参考。 ... [详细]
  • 申请地址:https://developer.apple.com/appstore/contact/?topic=expedite 常见申请理由:1. 我们即将发布新产品,这是一个媒体活动,我们无法承担任何风险,因此在多个方面努力提升应用质量。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
author-avatar
好人木庄子mzz
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有