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

Android SAF:来自DocumentsContract.getTreeDocumentId的文件夹(在磁盘上)的Uri与之前授权的Uri格式不同

Android SAF(Storage Access Framework)是Android系统提供的一种文件访问框架,用于在应用程序中访问用户设备上的文件和文件夹。它提供了一种标准的方式来与不同的文件存储提供者进行交互,包括内部存储、外部存储和云存储服务。

在使用Android SAF时,可以通过DocumentsContract.getTreeDocumentId方法获取文件夹在磁盘上的Uri。然而,有时候获取到的Uri与之前授权的Uri格式不同,这可能会导致一些问题。

这种情况通常发生在应用程序升级或重新安装后,由于文件系统的变化,之前授权的Uri可能无法直接使用。为了解决这个问题,可以采取以下步骤:

  1. 检查之前授权的Uri是否可用:在使用之前授权的Uri之前,可以先使用ContentResolver的takePersistableUriPermission方法检查该Uri是否仍然有效。如果无效,则需要重新请求授权。
  2. 请求新的授权:如果之前授权的Uri无效,可以使用Intent.ACTION_OPEN_DOCUMENT_TREE动作启动一个文件选择器,让用户选择文件夹,并获取到新的授权Uri。可以使用startActivityForResult方法启动选择器,并在onActivityResult方法中处理返回的Uri。
  3. 更新应用程序中的Uri:获取到新的授权Uri后,需要更新应用程序中保存的Uri,以便后续的文件访问操作能够正常进行。

Android SAF的优势在于它提供了一种标准的文件访问方式,使得应用程序可以与各种文件存储提供者进行交互,而无需关心具体的实现细节。它还提供了权限管理机制,确保用户的文件隐私和安全。

Android SAF的应用场景包括但不限于:

  • 文件管理应用:可以使用Android SAF来实现文件的复制、移动、删除等操作。
  • 多媒体应用:可以使用Android SAF来访问和管理用户设备上的照片、音频和视频文件。
  • 文档编辑应用:可以使用Android SAF来打开和保存用户设备上的文档文件。

腾讯云提供了一系列与云存储相关的产品,可以与Android SAF结合使用,例如:

  • 对象存储(COS):腾讯云对象存储是一种高可用、高可靠、低成本的云存储服务,适用于存储和管理各种类型的文件和数据。详情请参考:腾讯云对象存储
  • 私有网络存储(CFS):腾讯云私有网络存储是一种高性能、可扩展的共享文件存储服务,适用于多个云服务器之间的文件共享和协作。详情请参考:腾讯云私有网络存储
  • 云硬盘(CVM):腾讯云云硬盘是一种可扩展的块存储服务,适用于云服务器的数据存储和持久化。详情请参考:腾讯云云硬盘

通过结合Android SAF和腾讯云的相关产品,开发人员可以实现更加灵活和可靠的文件访问和存储功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android11 无Root 访问data目录实现、Android11访问data目录、Android11解除data目录限制、Android11 data空白解决

解决方案 SAF方案缺点 放大招,ROOT权限直接解锁后带权访问Data目录 结语 封装好工具类 正文开始 关于Android11权限变化 谷歌Android11及以上系统中采用了文件沙盒存储模式,...获取某个文件目录权限 方法很简单,使用android.intent.action.OPEN_DOCUMENT_TREE(调用SAF框架文件选择器选择一个文件夹)Intent就可以授权了 等下会放出工具类...(); DocumentFile.isDocumentUri(); 看名字就明白了,但是我们有的是一个文件夹uri,当然使用这个方法来生成DocumentFile对象,不同方法生成DocumentFile...对象有不同效果,如果你用fromTreeUri生成默认是文件夹对象,有ListFiles() 方法 DocumentFile.ListFiles()也就是列出文件夹里面的全部子文件,类似于File.listFiles...看到这里大家应该懂了吧,是谷歌对没有授权文件夹目录进行了限制,不让你直接通过TreeUri生成正确Docment对象,至少Android/data目录是这样

10.9K31

ContentProvider再探——Document Provider

不管这些内容来自于哪里,不管是哪个应 用调用浏览系统文件内容命令,系统都会用一个统一界面让你去浏览。...它是DocumentsProvider子类,另外,document-provider存储格式 和传统文件存储格式一致,至于你内容如何存储,则完全决定于你自己,Android系统已经内置了几个 这样...一个document provider 中是以传统文件目录树组织起来: ?...Uri你可以知道什么,而Uri获取则是通过SAF得到!...4.4 获取资源路径问题 其实这个SAF我们用得较多地方无非是获取图片Uri而已,而从上面的例子我们也发现了: 我们这样获取链接是这样: content://com.android.providers.media.documents

90730

干货 | 携程Android 10适配踩坑指南

Android Support库不同,AndroidX软件包是单独维护和更新。这些AndroidX包使用严格语义版本控制,从版本1.0.0开始,您可以单独更新项目中AndroidX库。...DCIM、Pictures、Alarms, Music, Notifications,Podcasts, Ringtones、Movies、Download等目录 1)私有目录 应用私有目录文件访问方式之前...1)获取(创建)私有目录下文件夹 //自身目录下创建apk文件夹 File apkFile = context.getExternalFilesDir("apk"); 2)创建私有目录文件 生成需要下载路径...; Uri insertUri = resolver.insert(external, values); return insertUri; }else{ ... } 4)共享目录指定文件夹下创建文件...主要是公共目录下创建文件或文件夹拿到本地路径uri不同Uri,可以保存到不同公共目录中。

3.2K77

Android 10 和Android 11适配

背景 最近在项目中着手做Android10和Android11 适配时候,期间遇到了不少坑。之前有专门写过qq、微信分享适配。但是此次针对偏业务侧适配工作时候还是碰到了一些新问题。...分区后,qq或微信没法访问我们私有目录App-specific。因此,我们需要通过 fileprovider 转换成 content:// 格式去分享,临时授权给 qq或微信 来访问我们图片。...具体适配逻辑参考篇头文章~ 二、公共目录下资源访问 Google建议我们采用 mediaStore 或者 SAF 去访问。...Android10 上公共目录下图片无法通过file:// 格式去访问,提示找不到路径。如glide加载、图片选择库、裁剪框架等等都会收到影响。...但是,这里有个坑: Android10上不行,Android11上又可以!!为什么? 因为Google改回来了,让Android11支持file://格式了。。。。 (wtf?

1.3K41

Android 分区存储常见问题解答

Q: 我想保存非媒体文件,但我不想在卸载我应用时删除它们。我需要使用 SAF 吗? A: 也许需要。 如果这些文件允许应用外打开而无需通过您应用,那么系统文件选择器是较好选择。...Q: 我可以将非媒体文件放置于其他文件夹中 (例如 Downloads 文件夹),而无需任何权限。这是一个 Bug 吗? A: 不是。...如下是一些与其他应用共享文件方式: 直接分享: 使用 Intent.ACTION_SEND 可以让您用户通过各种格式设备上其他应用共享数据。...如果您使用这种方式,使用 AndroidX FileProvider 来将 file:// Uri 自动转换为 content:// Uri 可能会对您有所帮助。...注意,从 Android 10 开始,提供内容 不再需要请求权限。 也别忘了可以通过 ACTION_SEND 来 其他应用共享数据 (或允许它们 应用共享数据)!

99810

Android 10 适配攻略小结

1.Scoped Storage(分区存储) 说明 Android 10之前版本上,我们在做文件操作时都会申请存储空间读写权限。...其他目录,使用 存储访问框架SAF (Storage Access Framwork) 所以Android 10上即使你拥有了储存空间读写权限,也无法保证可以正常进行文件读写操作。..._ID)); Uri uri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id); 其次为了便于不影响之前选择图片返回...对于 SAF 使用,可以查看我之前 SAF使用攻略 ,这里就不展开说了。...如果您应用采用浅色主题背景,则 Force Dark 会分析应用每个视图,并在相应视图屏幕上显示之前,自动应用深色主题背景。

1.8K32

Android 一起来看看 7.0 新特性 FileProvider

本篇文章已授权为微信公众号 code小生 发布 一、前言 ---- 对于 Android 7.0,提供了非常多变化,不过和我们开发者关联最大,或者说必须要适配就是去除项目中传递 file:// 类似格式...对于面向 Android 7.0 应用,Android 框架执行 StrictMode API 政策禁止应用外部公开 file:// URI , 如果一项包含文件 URI intent 离开应用.../> 3、使用 FileProvider 生成内容 URI 配置工作已经全部完成了,后面就需要将之前传递 file:// 替换成 FileProvoider 需要用到..., flag); } 根据 Intent 查询出所有符合应用,都给他们授权,然后不需要时候通过 revokeUriPermission 移除权限。...三、总结 Android 7.0 禁止应用外部公开 file:// URI,所以我们必须使用 content:// 替代 file://,这时主要需要 FileProvider 支持,而因为 FileProvider

1.5K40

笔记(24)安卓各版本特性简述

1.放弃了之前一直使用Dalvik虚拟机,改用了ART虚拟机,实现了真正跨平台编译。...要在应用间共享文件,您应发送一项 content:// URI,并授予 URI 临时访问权限。进行此授权最简单方式是使用 FileProvider 类。...path:文件夹“相对路径”,完整路径取决于当前标签类型。...2.画中画(PIP)支持 一种特殊多窗口模式,常用于视频播放。 3.自适应启动器图标 桌面icon不同设备型号上显示为不同形状。...(应用只能访问系统应用和应用本身文件,如要访问全部文件,则需要更多权限) 2.权限变化 1.单次权限授权Android 11开始,每当应用请求位置信息、麦克风或摄像头相关权限时,面向用户权限对话框会包含仅限这一次选项

37810

Android 渗透测试学习手册 第三章 Android 应用逆向和审计

继续之前,让我们快速浏览一下这些不同组件: 活动(Activity):这些是用户可以之交互可视界面。这些可以包括按钮,图像,TextView或任何其他可视组件。...smali 是一种文件格式,其语法称为 Jasmine 语言类似。我们现在不会深入了解 smali 文件格式。...本节中,我们将讨论基于 Android 应用程序漏洞,以及如何识别和利用它们。 内容供应器泄露 许多应用程序使用内容供应器来存储和查询应用程序中数据或来自电话数据。...许多 Android 应用程序共享首选项,SQLite(纯文本格式)或外部存储器中,存储用户相关私密信息或应用程序信息。...缺少授权和认证 如果 Android 应用程序或一般移动应用程序没有适当安全措施情况下,尝试基于客户端检查来验证或授权用户,则这些应用程序最容易受到攻击。

98510

android共享文件夹_安卓多用户共享文件

大家好,又见面了,我是你们朋友全栈君。 Android N 之前 Uri 常规Uri有两种: 媒体文件Uri是content://, 表示这是一个数据库数据。去数据库查询正常返回。...其他文件Uri是file://, 表示这个是一个文件。这个uri是通过Uri.fromFile(File file)方法生成。 Android N 之前,这些uri可以传递到其他应用。...resource:自定义xml文件(下面会介绍) 2、res目录下新建一个xml文件夹,并且新建一个file_pathsxml文件(如下图) 3、打开file_paths.xml文件,添加指定分享目录...-094017.png 可以看到格式为:content://authorities/paths中name值/文件相对路径,即name隐藏了可存储文件夹路径。...这里需要多说一点,Uri 最终路径,file和path有很大关系 如果file路径完全包含path路径,则显示path路径+文件相对路径,如下: path路径 <external-path name

3.3K40

Android7.0后FileProvider升级安装包导致FileUriExposedException异常

框架执行 StrictMode API 政策禁止应用外部公开 file://URI。...fileerrorurl.png 出问题就开始解决吧 1.第一步当然你要访问文件是要权限,这个Android6.0后可要动态授权哦,这里不要忘了android.permission.REQUEST_INSTALL_PACKAGES.../> 3.上面的resource属性资源文件,res下新建一个xml文件夹,最后xmll文件夹中新建file_paths.xml文件。...path 属性用于指定apk所在文件夹名,步骤4中设置对应,不要弄错了。 name 属性告诉 FileProvider 为共享路径创建一个别名为 apk 路径字段,可任意。...,这里下载了外部存储私有缓存文件夹下, // 你可以选择其他存储地址如:外置SD卡等,但是要注意file_paths.xml中,<files-path

2.4K31

Android开发笔记(一百七十六)借助FileProvider发送彩信

} cursor.close(); // 关闭数据库游标 } } 注意到以上代码获得了字符串格式文件路径,而彩信发送应用却要求Uri类型路径对象,原本可以通过代码...“Uri.parse(path)”将字符串转换为Uri对象,但是从Android7.0开始,系统不允许其他应用直接访问老格式路径,必须使用文件提供器FileProvider才能获取合法Uri路径,相当于..." android:resource="@xml/file_paths" /> 上面的provider有两处地方是可变,一处是authorities属性,它规定了授权字符串...回到页面的活动源码,发送彩信之前添加下述代码,目的是根据字符串路径构建Uri对象,注意针对Android7.0以上兼容处理。...FileProvidergetUriForFile方法获得Uri对象,该方法第二个参数为文件提供器授权字符串(BuildConfig.APPLICATION_ID值为当前应用包名),第三个参数为

65020

Android7.0适配之FileProvider

,或者说必须要适配就是去除项目中传递file://类似格式uri了。...crash是不是很方~ 原因在官网已经给了解释: 对于面向 Android 7.0 应用,Android 框架执行 StrictMode API 政策禁止应用外部公开 file:// URI...然后再看一眼我们生成uri: content://com.zhy.android7.fileprovider/external/20170601-041411.png 可以看到格式为:content:..., flag); } 根据Intent查询出所以符合应用,都给他们授权~~ 恩,你可以不需要时候通过revokeUriPermission移除权限~ 那么增加了授权代码是这样: public...); 我们可以安装包之前加上上述代码,再次运行正常啦~ 现在我有两个非常疑惑问题: 问题1:为什么刚才拍照时候,Android 7设备并没有遇到Permission Denial问题?

1.6K40

Android适配全面总结(二)----版本适配

我们开发中,会对不同安卓版本做适配,比如我之前做过项目中最低兼容到4.4,最高兼容是最新系统7.1,由于不同版本系统中部分API版本也不同,我就要对这些API做特殊处理。...我这里简单给出几点我开发中使用过一些方式,仅供参考: 一、同一个api不同版本都存在,只是api一些接口方法有变更。...); //添加这一句表示对目标应用临时授权Uri所代表文件 cameraIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION...ID,这个ID要和之前创建时候Channel_ID相同 } manager.notify(1, builder.build()); 安装apk权限 Android...在运行 Android 8.0 或更高版本设备上使用此权限时,恶意下载程序将无法骗取用户安装未获得预先授权应用,所以我们需要加入安装apk文件权限。

2.3K10
领券