Android 11 保存文件到外部存储,并分享文件

众所周知,Android 11 使用了专属目录,并且强制启用。关于专属目录的介绍,这里不详细多说,因为官方文档已经很明确了,这里主要介绍我保存在外部存储根目录遇到的一些坑。
专属目录,就是Android11为应用开辟的专属空间,APP将文件保存到专属目录,不再需要请求存储权限,直接就可以保存。并且其它应用无法访问专属目录里的文件,保证了用户的隐私安全。

而我这里的需求不是将文件保存在专属目录里,也不是保存在媒体目录里,而是外部存储的根目录,新建一个文件夹,保存我的csv文件,并将csv分享出去。

其实之前针对Android 10,我就已经采用了 FileProvider 的做法,但是一年后,同样的代码出现了错误,并且Android10上没问题,Android11出现了问题。
我主要遇到了两个问题,

  1. Android 10 分享时提示 csv文件不存在: Failed to find configured root ....
  2. Android 11 保存为csv时,提示 : EPERM (Operation not permitted)

下面从头到尾介绍我的解决方法:

1. Manifest.xml

① 在 application 下添加:android:requestLegacyExternalStorage="true"

② 定义 FileProvider: 向您的应用清单添加一个元素。
name 固定使用 androidx.core.content.FileProvider ,
authorities 一般是 包名+fileprovider
exportedfalse
grantUriPermissionstrue,授予对文件的临时访问权限,用来分享。

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="com.adsale.registersite.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">

    <!-- 元数据 -->
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

③ 在 res 目录下 新建 xml 文件夹,创建文件名为file_paths,在里面添加如下代码。
在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <
  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值