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

Android10-无法对我在getExternalFilesDir()中创建的文件执行PersistableUriPermission

Android10中,无法对通过getExternalFilesDir()方法创建的文件执行PersistableUriPermission。这是由于Android10引入了一些安全性改进措施,其中包括对外部存储的访问权限进行了限制。

在Android10之前的版本中,我们可以通过使用PersistableUriPermission来授予其他应用对我们应用中创建的文件的访问权限。但是在Android10中,这种方式被限制了。

Android10中的新策略要求应用只能访问其私有目录下的文件,而对于外部存储的访问权限则需要通过使用Storage Access Framework(存储访问框架)来实现。这意味着,我们无法直接使用PersistableUriPermission来授予其他应用对通过getExternalFilesDir()方法创建的文件的访问权限。

为了解决这个问题,我们可以考虑以下几种替代方案:

  1. 使用FileProvider:可以通过使用FileProvider来共享应用的私有目录下的文件。FileProvider允许我们将文件暴露给其他应用,同时提供严格的权限控制。我们可以在应用的清单文件中配置FileProvider,并使用Content URI来访问文件。
  2. 使用ACTION_OPEN_DOCUMENT:如果我们需要允许其他应用访问我们的文件,并且需要在文件选择器中显示我们的应用,可以使用ACTION_OPEN_DOCUMENT来实现。通过使用这个操作,我们可以让用户选择我们的应用,并授予对文件的访问权限。
  3. 使用MediaStore API:如果我们的文件是媒体文件(例如图片、音频、视频等),可以考虑使用MediaStore API来管理这些文件。MediaStore API提供了对媒体文件的访问和管理功能,可以让我们在不暴露文件路径的情况下与其他应用共享媒体文件。

需要注意的是,以上替代方案都需要根据具体的应用场景和需求来选择合适的方法。在实际开发中,我们可以根据具体情况选择适合的方案来解决文件访问权限的问题。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云对象存储(COS):提供可扩展的云端存储服务,适用于存储和处理大规模非结构化数据。详情请参考:https://cloud.tencent.com/product/cos
  • 腾讯云移动推送(TPNS):为移动应用提供稳定可靠的消息推送服务,支持多种推送方式和个性化推送。详情请参考:https://cloud.tencent.com/product/tpns
  • 腾讯云云服务器(CVM):提供可扩展的云端计算服务,支持多种规格的虚拟机实例,适用于各种应用场景。详情请参考:https://cloud.tencent.com/product/cvm
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

好好管理你应用文件夹,别再乱用了

用户app进行数据清理或卸载可以清理外部存储和内部存储下所有文件目录。 3.2 内部存储 内部存储文件夹其他应用和用户无法直接访问,可以用于存放敏感数据。...这个是Android 5.0加入api,创建和获取位于/sdcard/Android/media目录下应用目录,该目录下文件能够被其他应用访问和被MediaStore查询和获取。...为数众多无责任开发者在这里胡乱创建文件夹,乱起名、乱放文件,普通用户根本无法判断哪些文件夹、文件是有用,卸载app之后留下庞大无法清理垃圾文件,导致手机空间不足。...getExternalStoragePublicDirectory(String type) 使用频率极高api,返回根目录下名为type文件夹,把它分为两种用法:一种是传入Environment...值得一提是淘宝有使用这个文件夹,用于保存它商品分享截图,这个位置的确可以避免被微信封杀~哈哈 Environment.DIRECTORY_PICTURES用于存放各种“正式”图片,强烈建议在这里创建文件夹存放你想要被用户发现图片

1.3K10

详解Android10分区存储机制(Scoped Storage)适配教程

翻译成通俗语言,不管是使用requestLegacyExternalStorage=true方式以兼容模式运行还是降低targetSDK都无法接下来2020年Android(API 29)10更新中被豁免...此应用无需请求与存储相关用户权限,即可以查看外部存储以下类型文件: 应用外部特定目录文件(使用getExternalFilesDir()访问)。...应用自己创建照片、视频和音频(通过MediaStore访问)。 分区存储将影响Android10系统首次安装启动、且targetSdkVersion =29应用。...MediaStore Api 否 外部存储 Downloads 无需权限 无需权限 通过存储访问框架SAF,加载系统文件选择器 否 外部存储 应用特定目录 无需权限 无法直接访问 getExternalFilesDir...应用想要获取当前应用专有存储目录路径是可以用Context.getExternalFilesDir()方式获取。

3.1K32

Android文件系统整理

总揽 Android文件系统从大方面分为以下几类: 1、内部存储 2、外部存储 3、SharedPreferences 4、数据库 PS:SharedPreferences和数据库我们另外篇幅详细介绍...内部存储空间 内部存储空间是 App 私有的存储数据存储空间,系统会阻止其他应用这部分数据访问,并且 Android 10(API 级别 29)及更高版本,系统会对这些位置进行加密。...最好将此目录视为媒体/共享存储部分。它是一个文件系统,可以保存相对大量数据,并且在所有应用程序之间共享(不强制执行权限)。...数据管理权限 某些应用使用场景时需要广泛访问设备上文件,但无法采用注重隐私保护存储最佳做法高效地完成这些操作。...应用可以通过执行以下操作向用户请求“所有文件访问权限”: 1、清单声明 MANAGE_EXTERNAL_STORAGE 权限。

77430

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

分区存储 Android Q引入了分区储存功能,在外部存储设备为每个应用提供了一个“隔离存储沙盒”。其他应用无法直接访问应用沙盒文件。...权限变更 Android Q 更改了应用设备外部存储设备文件(如:/sdcard )访问方式。...访问私有文件 应用需要将文件存储应用沙盒中,并且访问这个文件夹无需权限。官方推荐应用在沙盒内存储文件地址为Context.getExternalFilesDir()下文件夹。...比如要获得一张图片 Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES) 访问其他应用创建文件 只有满足以下两个条件时,您应用才能访问其他应用创建文件...照片中位置信息 我们拍摄照片一般Exif元数据包含了位置信息,Android Q 以前我们可以方便获取到图片位置信息,Android Q 会默认应用隐藏此类信息。

1.5K31

Android-文件存储目录

如果你想将文件存储于内部存储,那么文件默认只能被你应用访问到,且一个应用所创建所有文件都在和应用包名相同目录下。也就是说应用创建于内部存储文件,与这个应用是关联起来。...当一个应用卸载之后,内部存储这些文件也被删除。对于这个内部目录,用户是无法访问,除非获取root权限。...getExternalFilesDir(String type),type类型你可以根据自己存储文件类型来定义,会响应创建出该文件夹。...公有目录 公有目录里面的文件是可以被自由访问,即文件数据其他应用或者用户来说都是可以访问,当应用被卸载之后,其卸载前创建文件仍然保留。...说明: 使用频率极高api,返回根目录下名为type文件夹,把它分为两种用法:一种是传入EnvironmentDIRECTORY常量再创建子目录使用;一种是传入appPackageName或者易被识别归属名称创建子目录使用

3.5K20

Android 10 适配攻略小结

其他目录,使用 存储访问框架SAF (Storage Access Framwork) 所以Android 10上即使你拥有了储存空间读写权限,也无法保证可以正常进行文件读写操作。...但是不推荐此方法。因为在下一个版本Android,此条配置将会失效,将强制采用外部储存限制。其实早在Android Q Beta 3之前都是强制,但为了给开发者适配时间才没有强制执行。...OLED 屏幕每个像素都是自主发光,所以显示深色元素时像素所消耗电流更低,尤其纯黑颜色时像素点可以完全关闭来达到省电效果。 为弱视以及强光敏感用户提高可视性。...比如你要修改颜色,就在 res 下新建 values-night 目录,创建对应 colors.xml 文件。将具体要修改色值定义在里面。...限制了剪贴板数据访问权限 除非您应用是默认输入法 (IME) 或是目前处于焦点应用,否则它无法访问 Android 10 或更高版本平台上剪贴板数据。

1.8K32

【Android 插件化】“ 插桩式 “ 插件化框架 ( 获取插件入口 Activity 组件 | 加载插件 Resources 资源 )

三、博客资源 ---- 前言 上一篇博客 【Android 插件化】“ 插桩式 “ 插件化框架 ( 注入上下文使用 ) 注入上下文进行了相关代理操作 , 插件包界面组件 PluginActivity...拷贝插件包 : 应用启动后 , 先将插件包 apk 文件从 assets 目录拷贝到 getExternalFilesDir(null) 目录 ; 加载插件包 : 使用 PluginManager...加载插件包 ; /* 加载 " 插件 " 模块 apk 文件 先将该插件包拷贝到 */ String path = getExternalFilesDir(null).getAbsolutePath...> 0) { // 这里取插件包第 0 个 Activity // 次序就是 AndroidManifest.xml 清单文件定义 Activity... " 宿主 " 模块 , 使用 Resources 是无法获取到 " 插件 " 模块资源文件 , 使用 " 插件 " 模块资源文件之前 , 必须先加载其中资源文件 ; /** *

86210

【专业技术】Android数据保存之文件保存

getExternalFilesDir()获取到目录文件; 如果你文件没有必要控制访问权限,可以允许其它应用或者用户查看,那么外部存储是不错选择; 注:默认情况下应用程序安装到内部存储,您可以指定...android:installLocation属性AndroidManifest.xml文件,这样你应用程序可以安装在外部存储器。...文件中进行声明,但是这种默认权限可能会在以后Android版本变更,所以最好还是要在AndroidManifest显式进行读取权限声明,免得以后版本中程序出现问题,读取权限声明如下: <...private files: 这类文件属于你应用程序专有,对于其他应用程序无法使用,也没有任何利用价值,虽然这部分文件用户和其他程序是开放。...注意:通过getExternalFilesDir(String type) 方法创建文件在用户清除数据或者应用卸载时候会被系统清除掉,getExternalStoragePublicDirectory

2.1K60

你真的知道APP缓存目录内幕吗

检查介质可用性 使用外部存储执行任何工作之前,应始终调用 getExternalStorageState() 以检查介质是否可用。介质可能已装载到计算机,处于缺失、只读或其他某种状态。...2.外部存储 2.1 私有存储 Context.getExternalCacheDir() Context.getExternalFilesDir() 创建私有文件地址是/sdcard/Android.../date/package_name下面,Android文件夹是隐藏文件夹,用户无法操作。...例如,以下方法公共图片目录创建了一个用于新相册目录: public File getAlbumStorageDir(String albumName) { // Get the directory...getDir() 内部存储空间内创建(或打开现有的)目录。 deleteFile() 删除保存在内部存储文件。 fileList() 返回您应用当前保存一系列文件

1.8K40

Android 获取系统各个目录方法

Android开发过程,我们经常会对文件系统进行操作——存放、释放我们应用数据。Android系统中提供了各种功能文件目录,每个目录都有相应特点和功能。...,该目录内文件设备内存不足时会优先被删除掉,所以存放在这里文件是没有任何保障,可能会随时丢掉。...,外部存储目录实际上也分为两种: -公共文件(目录) 文件是可以被自由访问,且文件数据其他应用或者用户来说都是由 意义,当应用被卸载之后,其卸载前创建文件仍然保留。...().getAbsolutePath()); -私有文件 由于是外部存储原因即使是这种类型文件也能被其他程序访问,只不过一个应用私有的文件其他应用其实是没有访问价值(恶意程序除外)。...(TAG, getApplicationContext().getExternalFilesDir("").getAbsolutePath()); 扩展: getExternalFilesDir是手机设置

6.1K10

FileProvider无法获取外置SD卡问题解决方案 | Failed to find configured root that contains

它对应Context#getExternalFilesDir(String) Context.getExternalFilesDir(null)返回路径。...以上便是Android官方文档上介绍FileProvider所有支持所以path类型,这些类型Android手机内部存储区文件共享是可以行,但对于外置SD卡是不行,如果你想通过FileProvider.getUriForFile...FileProvider获取对外置SD卡支持 从Android官方文档没有找到FileProvider对外置SD卡支持任何说明,下面我们就从FileProvider源码找找是否有突破口,FileProvider...FileProvider支持path类型中有个TAG_ROOT_PATH,它对应值为root-path,root-pathAndroid官方文档是没有提及,但我们不妨试一下,将FileProvider...然后我们允许程序,发现将path设置为root-path解决了FileProvider无法使用外置SD卡问题。

1.8K80

Android教程-保存数据-保存文件

本节课描述了如何使用 File APIAndroid文件系统读写文件. File 对象适用于用一种没有跳跃从开始一直到结尾方式读写大量数据....为了在这些目录一个里面创建一个新文件,你可以使用 File() 构造器,传入由上述指定了你内部存储路径方法提供 File ....例如,下面的方法可以获取名称来自一个 URL 文件,并使用这个名称在你应用内部缓存路径创建一个文件 : public File getTempFile(Context context, String...这回返回外部存储上你应用私有路径根路径 . 请记住当用户卸载你应用时,getExternalFilesDir() 一个路径创建路径都会被删除掉 ....这些路径名称确保了文件为系统正常对待 . 例如,存储 DIRECTORY_RINGTONES 文件可以被系统媒体搜索器归为铃声一类,而不是音乐 .

2.6K30

【Flutter 实战】文件系统目录

老孟导读:Flutter 获取文件路径,我们都知道使用 path_provider,但对其目录含义不是很清楚,此文介绍 Android、iOS 系统文件目录,不同场景下建议使用目录。...pubspec.yaml 文件添加依赖: dependencies: path_provider: ^1.6.14 执行命令: flutter pub get 文件路径 path_provider...getApplicationDocumentsDirectory 应用程序可能在其中放置用户生成数据或应用程序无法重新创建数据目录路径。...iOS上,此功能会引发[UnsupportedError]异常,因为无法应用程序沙箱外部访问。 Android上,对应getExternalFilesDir(null)。...内部存储 用于保存应用私有文件,其他应用无法访问这些数据,创建文件在此应用包名目录下,没有 root 权限 手机无法在手机 文件管理 应用中看到此目录,不过可以通过 Android Studio

2.7K10

android:运行时权限工具类封装

但是,如果我们每一个界面把申请权限代码全都写一遍,是很费力气事情,而且不利于代码维护,所以就需要封装。...Activity 方法, 该方法反馈了权限申请情况,返回三个参数分别表示:请求码,被请求权限数组,权限被允许情况数组 (4)、某个权限之前是否被拒绝过?...但是,个人认为 某个权限被拒绝之后,直接给出提示,告知用户可能会影响哪些功能并给出重新配置权限引导会更好一些。...()获取当前APP对应缓存目录,使用该方式不用申请读写SD权限 * * 注意: * 不同品牌手机拍照处理不一样,个别手机即便我们没有指定存储路径,也会存储照片到默认地址。...文中 DynamicPermissionTool utils 包,TakePhotoActivity b26TakePhotoWithSysMethod 包 2、官方参考资料: 系统权限使用

1.5K20

AndroidQ(10)分区存储完美适配方法

本篇主要是AndroidQ(10)分区存储适配具体实现 要点: Android Q文件存储机制修改成了沙盒模式 APP只能访问自己目录下文件和公共媒体文件 对于AndroidQ以下,还是使用老文件存储方式...适配指导 AndroidQ中使用ContentResolver进行文件增删改查 1、获取(创建)自身目录下文件夹 获取及创建,如果手机没有对应文件夹,则系统会自动生成 //自身目录下创建...apk文件夹 File apkFile = context.getExternalFilesDir("apk"); 2、创建自身目录下文件 生成需要下载路径,通过输入输出流读取写入 String...结合上面代码,我们主要是公共目录下创建文件文件夹拿到本地路径uri,不同Uri,可以保存到不同公共目录。...,但不可直接使用路径访问 不可读写其他APP创建非媒体类文件 后续AndroidQ存储针对具体功能做介绍,欢迎关注~ 以上就是本文全部内容,希望大家学习有所帮助。

1.5K40

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

Android 10 版本,官方改动较大,相应开发者适配成本还是很高。...MediaStore API共享目录指定目录下创建文件或者访问应用自己创建文件,不需要申请存储权限 MediaStore API访问其他应用在共享目录创建媒体文件(图片、音频、视频), 需要申请存储权限...1)获取(创建)私有目录下文件夹 //自身目录下创建apk文件夹 File apkFile = context.getExternalFilesDir("apk"); 2)创建私有目录文件 生成需要下载路径...主要是公共目录下创建文件文件夹拿到本地路径uri,不同Uri,可以保存到不同公共目录。..."> 2)res目录新建xml目录,已建跳过 xml目录新建一个xml文件network_security_config.xml,然后AndroidManifest.xmlApplication

3.2K77

Android各版本迭代信息集合

前言 今天分享面试题是: Android版本迭代,总会进行很多改动,那么你熟知各版本都改动了什么内容?又要怎么适配呢? Android4.4 发布ART虚拟机,提供选项可以开启。...这一点其实就是限制了应用间共享文件,如果需要在应用间共享,需要授予要访问URI临时访问权限,我们要做就是注册FileProvider: 1)声明FileProvider。...对于针对 Android 8.0 应用,系统只会授予应用明确请求权限。然而,一旦用户为应用授予某个权限,则所有后续该权限组权限请求都将被自动批准。...这应该是个bug,Android8.0出现,8.1被修复。 我们处理办法就是要么去掉设置方向代码,要么舍弃透明效果。...--或者AndroidManifest.xml配置: android:usesCleartextTraffic="true" --> 移除Apache HTTP 客户端 6.0取消了Apache

1.1K20

Android存储访问及目录

外部存储对数据提供保护较少,所以系统不应该存储敏感数据在外部存储上。   特别地,配置和log文件应该存储在内部存储,这样它们可以被有效地保护。   ...任何应用私有的文件应该被放置 Context.getExternalFilesDir返回目录下,应用被卸载时候,系统会清理就是这个目录。   ...另一些共享文件应该被放置 getExternalStoragePublicDirectory(String)返回目录。   ...(API Level 9) Context API目录 getExternalFilesDir(String type)是应用在外部存储上目录。   ...Android 4.4之前版本要访问的话还是要声明读写权限,如果没有manifest写权限,上面两个get方法都会返回null。

1.8K10
领券