android 10文件存储兼容

android 10文件存储兼容

Android Q 推送已经一段时间,手上几部测试机也已经升级到android 10 系统。google 对用户隐私是越来越上心了。简单介绍下适配10系统分区存储。

为什么需要兼容10系统?
gogle 官网罗列的一大串兼容10的好处。比较重要的一点是为了保护用户隐私使用类似应用沙箱原理。自己的app只可以访问自己的存储资料。
2.避免app已经卸载了,留下来一个几十MB 或者几百MB的无用文件夹,采用新的文件存储方案,在app卸载同时一并卸载关联的文件夹及文件
3.如何只访问自己的存储不去访问其他app或者公共系统资源,那么就不用去申请SDcard的读写权限。
4.一切为了安全!!!

如果不想立即适配android 10 分区存取新特性,怎么办?

只需要在Mainifest–application下添加如下属性即可

android:requestLegacyExternalStorage="true"

想了解适配步骤,知其然知其所以然,请移步 android Studio 官网 这里简单写下自己兼容步骤

1.全局替换所有老版本获取SdCard 路径的api为新版 api 方式.

   #### 老版本  android Q 以下
   public String SDCARD_DIR = Environment.getExternalStorageDirectory().getAbsolutePath();
   
    #### 新版本  android Q 以上
    public String SDCARD_DIR = ContextCompat.getExternalFilesDirs(
    FrameApplication.instance(), null)[0].getAbsolutePath();

替换api后就算兼容完成了。

tips:
针对应用中使用到三方SDk还未进行兼容,采用清单文件添加 android:requestLegacyExternalStorage="true" 属性就可以,等待三方sdk提供方兼容。

集成过程中发现读取系统相册的功能不可用,查阅资料后得知 MediaStore.Images.Media.DATA,这个查阅Image Path的方式不可用。目前采用通过Uri进行显示Image而不是通过Image 路径。如果需要将文件上传至服务端,需要额外处理Uri,将Uri对应的图片通过流的方式读取到其他目录,然后拿到图片路径进行操作如下:

  // 通过Uri查找图片名称,然后输出图片到Sd卡指定位置,将图片路径返回
    private String getPathByUri(Uri uri) {
        ContentResolver resolver = this.getContentResolver();
        String fileName = String.valueOf(System.currentTimeMillis());
        Cursor cursor = resolver.query(uri, null, null, null, null);
        if (cursor != null && cursor.getCount() > 0) {
            cursor.moveToFirst();
            fileName = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME));
            cursor.close();
        }

        String path = CopyUriToSd.Companion.getInstance().copyUriToExternalFilesDir(this, uri, fileName);

        return path;
    }
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值