Android7.0虚拟文件概念

Android7.0虚拟文件概念

问题

在项目中有一个拍照裁剪然后上传的功能,然后我发现同样的一份代码在不同手机上表现的效果不同,主要体现在拍照后是否能根据事先准备的文件uri调起裁剪程序

发现

经过更深入的观察我认为是Android版本的不同造成的差异,主要分割为7.0以上与7.0以下,从Android官网查了下发现的确Android7.0系统针对文件存储框架做出了变更,在Android7.0中修改了文件储存框架加入了虚拟文件的概念

1
2
3
4
5
6
7
8
虚拟文件功能可以让您的 DocumentsProvider 返回可与 ACTION_VIEW
intent 使用的文件 URI,即使它们没有直接字节码表示。Android7.0
还允许您为用户文件(虚拟或其他类)提供备用格式。
为获得您的应用中的虚拟文件的 URI,首先您应创建一个 Intent以打开文件
选择器 UI。由于应用不能使用 openInputStream() 方法来直接打开一个
虚拟文件,因此如果您包括了 CATEGORY_OPENABLE 类别,您的应用不会收
到任何虚拟文件。

理解

个人的理解下来这是一种对文件选择更加方便的优化

小于7.0的情况下拍照后的传统uri传递文文件file:///storage/emulated/0/Photo1555582174536

这种情况下我们必须手动构造uri来获取文件

大于等于7.0可以直接通过虚拟uri来传递文件content://com.zhihu.matisse.sample.fileproviderA/camera_photos_a/storage/emulated/0/Photo1555582292730

这样的话我们只需将第一次调起选择器UI之前传递的uri保存起来 后面可以直接加以利用

总结

7.0之前和之后的文件获取逻辑有些许的改变 7.0以后可以更加方便进行uri的传递 但是需要进行适配

参考 Android7.0更新内容

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2019 All Rights Reserved.

访客数 : | 访问量 :