plus.io

2023-06-06  本文已影响0人  扶得一人醉如苏沐晨

名词介绍: Android 10+ 表示android系统版本大于等于10 既包括android 10以及android 11的系统统称

Android 10+ 概述

Android 10系统开始 进一步增强了平台功能,为外部存储设备上的应用和用户数据提供了更好的保护。作为这项工作的一部分,平台引入了进一步的改进,以简化向分区存储的转换。
为了让用户更好地控制自己的文件,保护用户隐私数据,并限制文件混乱情况,Android 11在分区存储基础上限制了应用访问其他应用的文件。

分区存储

先说一下为什么会有分区存储这个机制出现。

在分区存储之前,某些应用中,即使功能很简单,大部分都不需要这么宽泛的权限。
这就使得某些应用程序

1、乱占空间 :各种各样的文件散布在磁盘的各个地方,当用户卸载应用之后,这些被遗弃的文件被滞留在原地,无人管理,占用了磁盘空间,最终结果就会导致磁盘不足
2、随意读取用户的数据
3、随意读取应用的数据

因此分区存储诞生了,限制了过于宽泛的 存储权限。

什么是分区存储?

Google针对外部存储引入了一个新特性,它的名字叫:Scoped Storage,Google官方对它的翻译为分区存储,我们也可以把它叫做沙盒存储。
更明确了空间的归属,也就是对目录有一个更明确的所有权结构。

分区存储是一种安全机制,用于防止应用读取其他应用的数据。

分区存储机制下uni-app/5+ 开发者的影响

android 9及以下系统未做分区存储,除其他应用的内部存储空间不可以读写,其他任意存储目录下的资源文件都可以正常读写操作。
android 10仅对targetSdkVersion>=29则会开启分区存储。targetSdkVersion小于29则不会有任何限制与android9及以下同理。
andorid 11强制执行分区存储。不允许应用读写操作非应用沙盒目录和系统公共目录下的资源文件。

dcloud已对分区存储机制做了适配工作。但也增加了开发者对文件目录操作的规则。在分区存储的环境下分出两个可操文件数据目录系统公共目录应用沙盒目录.

系统公共目录:Downloads、Documents、Pictures 、DCIM、Movies、Music、Ringtones等


目录分析

android的目录在开发APP所涉及到的有系统公共目录应用沙盒目录

应用沙盒目录下面又分为应用公共目录应用沙盒目录

系统公共目录

主要包括DownloadsDocumentsPicturesDCIMMoviesMusic等。

系统公共目录缺陷:

如果需要其他第三方读取我们开发的APP的文件怎么办?

应用沙盒存储(分区存储)目录

分区存储主要包括应用的公有目录和应用的私有目录

注意的是当我们请求这个公共目录的时候,它不会创建显示出来,只有当我们在这个文件夹下面创建文件或者目录的时候,这个document目录才会出来

plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, fileSystem => {
    console.log(fileSystem.name);
});
//PUBLIC_DOCUMENTS

plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, fileSystem => {
        fileSystem.root.getDirectory('testCommonEntry', {
        create: true,
        exclusive: false
    })
});

image
image
plus.io.requestFileSystem(plus.io.PUBLIC_DOWNLOADS fileSystem => {
    console.log(fileSystem.name);
});
//plus.io.PUBLIC_DOWNLOADS
plus.io.requestFileSystem(plus.io.PUBLIC_DOWNLOADS, fileSystem => {
        fileSystem.root.getDirectory('testDownloadEntry', {
        create: true,
        exclusive: false
    })
});

image image

但是注意正式包看不了www目录

image

如何才能看到WWW目录呢,需要将应用设置为释放资源模式才能访问此目录,配置方法:

这个目录没啥好说的,不需要配置或者用plus.io即可正常看到该目录

uni.downloadFileuni.saveFile分析

直接上代码,我们去手机目录看

const downloadTask = uni.downloadFile({
    //仅为示例,并非真实的资源
    url: 'http://img.netbian.com/file/2019/0414/7bee7eef5fc44417a0b02a46576e7e16.jpg',
    success: res => {
        if (res.statusCode === 200)
            uni.saveFile({
                tempFilePath: res.tempFilePath,
                success: red => {
                    this.luj = red.savedFilePath
                }
            });
    }
});

image

官方注明了:文件的临时路径,在应用本次启动期间可以正常使用,如需持久保存,需在主动调用 uni.saveFile,才能在应用下次启动时访问得到**
我们第二次启动APP,再进行一次下载看会发生什么

image

可以看到将第一次的download目录删除了,重新生成了一个下载的目录,所以为了持久存储,uni.saveFile出现了。

image

自定义下载文件位置

上一篇 下一篇

猜你喜欢

热点阅读