相册自动备份功能详细设计 v2 - Logan676/seadroid GitHub Wiki
行为
- 默认情况下相册上传功能是关闭的
- 打开相册上传功能后,检测Wi-Fi,只有Wi-Fi网络下才启动上传相册服务。Wi-Fi关闭的情况下是无法勾选上传服务的选择框的,也就是无法启动上传服务
- 首次启动上传服务,应用会引导用户选择account和library,因为需要这些数据来上传相片。如果用户登录了多个账户,上传相册前,需要选择上传到哪个账户的哪个library里。点击确定按钮,把account信息和library信息保存到本地,并开启上传服务,初始化网络连接,同时注册广播接收器来监听和处理拍照上传的操作,广播接收器也负责向数据库写入成功上传的照片cache。
- 上传服务启动后,检测本地是否储存了上传照片必需的数据,如account信息和library信息。然后发送网络请求查看服务器中是否存在Camera Uploads文件夹
- 如果Camera Uploads文件夹不存在,则新建一个,否则进入下一步
- 开启异步任务来扫描SD卡上的相片,获取到的所有相片的绝对路径等待上传
- 循环遍历获取到的所有相片,依次把待上传相片放在上传队列里,为每一张上传的相片绑定一个上传服务,上传服务的状态包括初始化、上传中、上传取消、上传成功、上传失败。另外,上传服务还用来发送上传状态的广播
- 广播接收器只有接收到上传成功的广播才会在本地数据库里写入图片cache。如果接收到的是上传失败或者上传被取消掉的广播则不做处理,直接忽略掉
- 在设置菜单中,如果用户点击更改library按钮,首先关闭正在进行的上传服务并解绑广播接收器,关闭网络连接,然后弹出对话框让用户选择要使用哪个账户下的哪个library。当用户点击确定按钮后,保存用户选择的account信息和library信息,并使用这些新得到的数据再次开启照片上传服务,初始化网络连接,同时注册广播接收器
- 相片上传服务被启动后,返回第4步继续执行
- 服务开启状态下,如果用户使用相机拍摄了照片,则注册的监听器会捕捉到新增照片的事件。此时会再次发送网络请求查看Camera Uploads文件夹是否存在,不存在则新建,存在则忽略,然后进入下一步
- 获取到新增相片的绝对路径,把这些相片放到上传队列中等待上传
- 在设置菜单中,用户关闭上传服务按钮后,关闭上传的服务,解绑广播监听器,关闭数据库和网络连接
- 设置菜单显示为服务关闭,并且更改library的按钮显示为不可操作状态
需要考虑到的一些应用场景
- Wi-Fi不可用时
- 某个账户被删掉后
- 安装新版本的apk但是没有清理掉本地缓存的情况
- 用户从web端删掉某个Library
- 删掉Camera Uploads文件夹
- Camera Uploads文件夹的名称是约定不能改变的,用户无法自定义
当用户删除了Camera Uploads文件夹,但是上传的library不变时,则重新创建一个Camera Uploads文件夹(由于本地缓存的原因,可能导致无法上传所有的照片)
当用户删除了Camera Uploads文件夹并且更改了上传的library的话,先判断library中是否已经存在Camera Uploads文件夹,不存在则创建