ios dat 文件读写_iOS与安卓的相册,逻辑有很大不同

ccdea7f036904e4bc999afce1e6f226d.png

个人转iOS还不到一年,之前一直用的是安卓机。看见知乎有此类争议,于是简单写了下我对安卓与iOS相册逻辑的认识。希望此文能解答一些疑惑。(为避免争吵,尽量不讨论他们之间的利弊)

首先先说说安卓的相册:

安卓有一个“本地目录”,拿我手里安卓8的坚果R1来说,这个路径在storage/emulated/0下(以下简称“本地目录”)。

2358f1ae493ebb51baaa628ebbfc3123.png
MT管理器下的本地目录

系统相机拍摄的照片视频,被放在本地目录/DCIM/Camera/下

60989a15760649020f311024e78d206b.png
相机拍摄照片所在目录(右侧)

接下来,我用MT管理器在本地目录建立一个名为“我建的相册1”的文件夹,并将相机目录的一张照片拷贝进此文件夹

f44c17a57a6a782650f8a98867824b93.png

可以看到相册app中同步生成了以我放了图片的目录名为名称的分类相簿,并且里面的图片正是我拷进去的那一张

edde14cb205b279c45b183d8542a9a9a.png
产生了一个新相册

接着,我用MT管理器删除“我建的相册1”文件夹下的图片,此时“我建的相册1”变成了一个空文件夹

475317c91d5dc6e18f9fc3ada3a9e741.png
产生的相册消失了

可以看到,文件夹成为空的后,相册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有对照片的高级管理权限。

8dbdcc43c0da46327364c8236f3b9fa9.png

有人说,iOS的相册app其实使用的不是相册app自己的空间,也是一个本地目录,于是我连接上电脑,点击信任电脑,并输入锁屏密码后,看到了所谓的本地目录(目录下只有一个DCIM文件夹)。但是如果没有给连接的电脑授权,也没有给iOS上的任何第三方app授权,照片就只能用相册app看到;所以我觉得“iOS的相册app使用的是自己的空间”,逻辑上并没有问题。

f891b1344c63fb929dd4e7ebcf04bee8.png

照片就在DCIM的两个文件夹中,对比了两个文件夹中的内容后,发现“100APPLE”为本机产生的照片。而“100CLOUD”中为iCloud同步到本机的照片

然后我用QQ保存一张图片到相册,可以看到此时名为QQ的分类相簿中出现了我保存的图片

509d4dcf49fca11db0944591c9654704.png

用电脑查看,发现该图片保存到了“100APPLE”文件夹中,也就是与相机拍摄的图片处于同一个文件夹,并且图片文件以“IMG_四位数字.JPG”命名。

7f96366be6aa8227740a7329bc9302ae.png

结论,iOS的相册并不像安卓是把图片放到本地的各个文件夹供相册去扫描,而是所有app保存与相机拍摄等图片都在同一个文件夹

那iOS的分类相簿是怎么一回事儿呢,其逻辑与安卓的不同点就在这里,经过个人的测试总结如下。

安卓相册的分类相簿是本地图片文件放置在不同的文件夹内。

而iOS相册的分类相簿只是给图片打上一个标签,其实图片都是在统一的目录下。(这也就是为什么iOS的相册从来没有一个“扫描本地图片”的过程)

由于这一点的不同,安卓转iOS的用户和iOS转安卓的用户可能都经历过一些疑惑,安卓的相册逻辑应该很好理解,如果对iOS相册的这种标签化的逻辑不太了解的话,请仔细阅读下面几段:

iOS相册里,一张图片可以有0至多个标签。所有的分类相簿,其实就是所有已知的标签(注意,“最近的项目”并不是一个分类相簿,这是一个把所有图片按添加时间排列的特殊相簿)

当一个图片没有任何标签时,他就只能在“全部照片”中被找到,不会存在于任何一个分类相簿中。安卓相册是不存在这种情况的,因为安卓的逻辑的“全部照片”就是各个已知分类相簿(也就是文件夹目录)的图片的集合。

iOS相册的同一张图片也可以同时被添加到多个分类相簿中,其实就是被打上了多个标签,但其在“全部照片”中并不会出现重复的多张(安卓相册的逻辑中也不会存在这种情况)。

接下来实例说明一下。

我从“QQ”相簿中删除某张图片,会出现两个选项,如下图

604d5c76745c28713b40cc78d00a6e08.png

“从相簿中移除”其实是指给图片去掉“QQ”这一标签,这样在“QQ”这个相簿中,这张图片就没有了,但它仍存在于“全部照片”中;而第二个选项的“删除”才是真正的删除照片本体,这样“QQ”相簿和全部照片中就都不会有这张图片了。

补充一点,若删除图片本体,然后又在“最近删除”中恢复了该图片,图片所携带的标签也会一并恢复,也就是图片会重新出现在其被删除之前被添加到的分类相簿中(若这个分类相簿仍然存在)

还有一个问题,iOS的app的分类相簿是怎么被创建的。初步判断应该是app申请相册权限的时候由app创建的,不过我还没做明确的测试。

值得一提的是,iOS14里对相册权限又进行了细分,可以设置仅给app读取选中的部分图片,而不是整个相册的所有图片

29bcb9b3af241f56a918e976bd4fcda4.png
更新了iOS14公测版的iPad mini5

比如我只给QQ授权一张图片,QQ就只能读取到一张图片

602657cf26e88ec1332e3b5f6f1e1b18.png
仅能读取到一张照片

以上。欢迎补充与讨论。


另外,我还写了一遍与iOS相册的使用有关的文章,补充了更多和iOS相册有关的内容

想当年光辉岁月:梳理一下iOS相册的逻辑,以及怎样减少照片对iCloud的空间占用​zhuanlan.zhihu.com
102e24931d4c1a93738dc1bdd97e2917.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值