AndroidQ沙盒机制之分区存储适配

2020-06-23 13:02 来源:易采站长站 作者:于海丽 点击: 评论:

A-A+

原标题:AndroidQ沙盒机制之分区存储适配

为了让用户更好地控制自己的文件,Android Q更改了应用访问设备外部存储空间中文件的方式。Android Q用更精细的媒体特定权限来替换READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限,并且无需特定权限,应用即可访问自己在外部存储设备的文件。

1、针对应用私有文件的隔离存储沙盒

对于每个应用,Android Q 都会创建一个“隔离存储沙盒”,以限制其他应用访问本应用在外部存储设备的文件。常见的外部存储设备是/sdcard。此定义具有两个优点:

①、需要的权限更少。 应用沙盒中的文件是您应用的私有文件。因此,您不再需要任何权限即可在外部存储设备中访问和保存自己的文件;

②、相对于设备上的其他应用,隐私性更强。 任何其他应用都无法直接访问您应用的隔离存储沙盒中的文件。借助此访问权限限制,您的应用可以更轻松地维护沙盒文件的隐私性;

在外部存储设备存储文件的最佳位置是Context.getExternalFilesDir()返回文件所在的位置,因此此位置的行为方式在所有Android版本中都保持一致。使用此方法时,需要在媒体环境中传递我们要创建或打开的文件类型对应的文件。例如,要保存或访问应用私有图片,请调用Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)。

2、媒体文件的共享集合

如果我们的应用创建了属于相应用户的文件,并希望卸载该应用时保留此用户,则将这些文件保存在某个通用媒体集合(共享集合)中。共享集合包括:照片、音频、视频和下载内容。

3、查看其它应用的文件所需权限

我们的应用无需请求任何权限,即可在这些共享集合中创建和修改自己的文件。但是,我们的应用要创建或修改其他应用已创建的文件,则必须先请求相应权限:

①、访问照片和视频共享集合中其他应用的文件时,需要 READ_MEDIA_IMAGES 或 READ_MEDIA_VIDEO 权限(具体取决于您的应用需要访问的文件类型);

②、访问音乐共享集合中其他应用的文件时,需要 READ_MEDIA_AUDIO 权限;

4、访问共享集合

在请求必要的权限后,我们的应用可以使用MediaStore API访问这些集合:

①、对于照片和视频共享集合,请使用 MediaStore.Images 或 MediaStore.Video;

②、对于音乐共享集合,请使用 MediaStore.Audio;

③、对于下载内容共享集合,请使用 MediaStore.Downloads;

要在原生代码中访问媒体文件,请使用基于Java或kotlin代码的MediaStore来检索相应文件,然后对相应文件描述符传递到原生代码。详情请参考从原生代码访问媒体文件部分。

5、保留应用在共享集合的文件

默认情况下,在用户卸载应用时,Android Q会清理保存在沙盒的文件。要在卸载应用时保留这些文件,请使用存储访问框架存储访问框架,或将文件保存在共享集合中。要保留共享集合的文件,请在相关的MediaStore集合中新插一行,并使用以下方法:

【易采站长站编辑:秋军】