个人转iOS还不到一年,之前一直用的是安卓机。看见知乎有此类争议,于是简单写了下我对安卓与iOS相册逻辑的认识。希望此文能解答一些疑惑。(为避免争吵,尽量不讨论他们之间的利弊)
首先先说说安卓的相册:
安卓有一个“本地目录”,拿我手里安卓8的坚果R1来说,这个路径在storage/emulated/0下(以下简称“本地目录”)。
系统相机拍摄的照片视频,被放在本地目录/DCIM/Camera/下
接下来,我用MT管理器在本地目录建立一个名为“我建的相册1”的文件夹,并将相机目录的一张照片拷贝进此文件夹
可以看到相册app中同步生成了以我放了图片的目录名为名称的分类相簿,并且里面的图片正是我拷进去的那一张
接着,我用MT管理器删除“我建的相册1”文件夹下的图片,此时“我建的相册1”变成了一个空文件夹
可以看到,文件夹成为空的后,相册app中对应的分类相簿也消失了,得出结论,本地目录只要有一个包含图片的文件夹,就会生成一个对应文件夹名字的分类相簿
但其实以下几种情况不会生成分类相簿
- 图片在本地目录/Android/data/下
- 文件夹中被预先放置了“.nomedia”文件
- 文件夹的名字以“.”开头(隐藏文件夹)
值得注意的是,对于一些常见的,能确定目录的app(比如QQ,微信),即便QQ保存的图片在本地目录/Tencent/QQ_Images/下,但分类相簿不会以“QQ_Images”命名,而是直接命名为“QQ”。这应该是安卓定制系统针对性优化的结果。
关于安卓的相册权限:
其实安卓并没有“相册权限”一说,只有“存储权限”,从安卓6.0开始,如果不给app存储权限,app在本地目录就只能读写本地目录/Android/data/app包名/下的内容,自然也无法访问本地目录下照片,我用原生安卓6及以上的系统的时候,基本上所有国产app初次打开都会询问申请该权限(就是那个不给不让用的权限)。
但在我这部安卓8的坚果R1上app却是直接获得该权限的,不知道是不是考虑到不给权限的话大部分app会直接不让使用,为了避免这个麻烦就直接给了。当然我不觉得这样是好的,在我的坚果R1上,MT管理器没申请权限直接就能读写整个本地目录,QQ没申请权限直接就能读照片。
安卓相册常见的问题:
问:相册里会经常多出一些莫名其妙的缓存照片?
答:安卓app通常会选择把缓存图片放到本地目录的某个文件夹下,根据开发者规范,这些在本地目录下放置缓存图片的目录需要通过放置“.nomedia”来避免被相册app扫描到,但总有些开发者不遵循此规范。解决方法就像很多人说的那样,这样的相册见一个隐藏一个就OK。
iOS的相册:
iOS相册App实际上的名字是“照片”(英文Photos),安卓上的这个App一般叫“相册”,早期的安卓译作做“图库”(英文Gallery)。不过这个不重要,为避免歧义统一称为“相册”
iOS不同于安卓,iOS使用了沙盒机制(具体可以自行百度),所以iOS中并不存在一个谁都可以读写的,像安卓的“本地目录”一样的公共文件夹,app与app的空间是相互隔离的。区别于安卓扫描“本地目录”中的照片,iOS的相册使用的是由相册app管理的空间来存储照片。app如果要访问照片,有一个照片权限,打开之后app就能读取和写入相册app中的照片了。注意,只能读取和写入,而没有删除与修改的权限,仅相册app有对照片的高级管理权限。
有人说,iOS的相册app其实使用的不是相册app自己的空间,也是一个本地目录,于是我连接上电脑,点击信任电脑,并输入锁屏密码后,看到了所谓的本地目录(目录下只有一个DCIM文件夹)。但是如果没有给连接的电脑授权,也没有给iOS上的任何第三方app授权,照片就只能用相册app看到;所以我觉得“iOS的相册app使用的是自己的空间”,逻辑上并没有问题。
照片就在DCIM的两个文件夹中,对比了两个文件夹中的内容后,发现“100APPLE”为本机产生的照片。而“100CLOUD”中为iCloud同步到本机的照片
然后我用QQ保存一张图片到相册,可以看到此时名为QQ的分类相簿中出现了我保存的图片
用电脑查看,发现该图片保存到了“100APPLE”文件夹中,也就是与相机拍摄的图片处于同一个文件夹,并且图片文件以“IMG_四位数字.JPG”命名。
结论,iOS的相册并不像安卓是把图片放到本地的各个文件夹供相册去扫描,而是所有app保存与相机拍摄等图片都在同一个文件夹。
那iOS的分类相簿是怎么一回事儿呢,其逻辑与安卓的不同点就在这里,经过个人的测试总结如下。
安卓相册的分类相簿是本地图片文件放置在不同的文件夹内。
而iOS相册的分类相簿只是给图片打上一个标签,其实图片都是在统一的目录下。(这也就是为什么iOS的相册从来没有一个“扫描本地图片”的过程)
由于这一点的不同,安卓转iOS的用户和iOS转安卓的用户可能都经历过一些疑惑,安卓的相册逻辑应该很好理解,如果对iOS相册的这种标签化的逻辑不太了解的话,请仔细阅读下面几段:
iOS相册里,一张图片可以有0至多个标签。所有的分类相簿,其实就是所有已知的标签(注意,“最近的项目”并不是一个分类相簿,这是一个把所有图片按添加时间排列的特殊相簿)
当一个图片没有任何标签时,他就只能在“全部照片”中被找到,不会存在于任何一个分类相簿中。安卓相册是不存在这种情况的,因为安卓的逻辑的“全部照片”就是各个已知分类相簿(也就是文件夹目录)的图片的集合。
iOS相册的同一张图片也可以同时被添加到多个分类相簿中,其实就是被打上了多个标签,但其在“全部照片”中并不会出现重复的多张(安卓相册的逻辑中也不会存在这种情况)。
接下来实例说明一下。
我从“QQ”相簿中删除某张图片,会出现两个选项,如下图
“从相簿中移除”其实是指给图片去掉“QQ”这一标签,这样在“QQ”这个相簿中,这张图片就没有了,但它仍存在于“全部照片”中;而第二个选项的“删除”才是真正的删除照片本体,这样“QQ”相簿和全部照片中就都不会有这张图片了。
补充一点,若删除图片本体,然后又在“最近删除”中恢复了该图片,图片所携带的标签也会一并恢复,也就是图片会重新出现在其被删除之前被添加到的分类相簿中(若这个分类相簿仍然存在)
还有一个问题,iOS的app的分类相簿是怎么被创建的。初步判断应该是app申请相册权限的时候由app创建的,不过我还没做明确的测试。
值得一提的是,iOS14里对相册权限又进行了细分,可以设置仅给app读取选中的部分图片,而不是整个相册的所有图片
比如我只给QQ授权一张图片,QQ就只能读取到一张图片
以上。欢迎补充与讨论。
另外,我还写了一遍与iOS相册的使用有关的文章,补充了更多和iOS相册有关的内容
想当年光辉岁月:梳理一下iOS相册的逻辑,以及怎样减少照片对iCloud的空间占用zhuanlan.zhihu.com