【发布时间】:2015-01-03 01:15:32
【问题描述】:
背景资料
我一直在编写备份照片服务,它需要从 Android 外部存储中获取所有照片的绝对路径(例如存储在“DCIM”目录及其子目录中的照片)并将它们上传到远程服务器。问题是如何从 Android 设备获取所有验证照片的绝对路径。由于有绝大多数 Android 设备,因此很难确保 get-photo-absolute-path 算法成功到达所有 validate photos Gallery 目录并遍历其中的所有照片路径。
现在我的应用只支持从主要外部存储(不支持辅助外部存储,如可移动 SD 卡)上传照片。也就是说。
- 如果设备只有一个模拟的外部存储(板载闪存),相机上传服务可以正确扫描其上的照片路径。
- 如果设备只有可移动存储(如 SD 卡),相机上传服务也可以正确扫描照片路径。
上面的算法扫描来自主要外部存储的照片路径,它可以正常工作。但是说到
- 如果设备同时具有模拟外部存储和可移动存储,相机上传服务仅扫描模拟外部存储(主存储)上的照片路径,但大多数用户将照片保存到 16G 或更大尺寸的可移动 SD我的应用程序将忽略卡(辅助存储),这就是问题所在。查看完整的issue here。
代码实现
为了从内部存储中获取绝对照片路径,我硬编码了一个“外部目录列表”,
String[] paths = {
"/DCIM",
"/DCIM/Camera",
"/DCIM/100MEDIA",
// Many Samsung phones mount the external sd card to /sdcard/external_sd
"/external_sd/DCIM",
"/external_sd/DCIM/Camera",
"/external_sd/DCIM/100MEDIA"
};
并结合绝对路径如
String fullPath = Environment.getExternalStorageDirectory().getAbsolutePath() + path;
我知道这不是最佳做法,所以才寻求帮助。顺便说一句,请参阅完整的external directory list
问题
从 Android 存储中获取绝对照片路径
- 检查是否安装了外部存储,然后默认从内部存储扫描照片。这可以满足大多数获取照片路径的要求,请参阅完整的implementation here
- 让用户选择从SD卡上传照片的特定目录(如果已安装)
所以我想知道上面的建议是否正确?
任何 cmets 或参考将不胜感激。
编辑 不同的制造商设置他们的 SD 卡安装点不同,没有固定的规则,几乎不可能(或者说,不好的做法)通过应用程序在后台自动扫描和上传照片。要从 SD 卡获取照片路径,我认为实用的方法是只扫描根目录,然后在文件浏览器窗口中显示这些目录以让用户选择特定的画廊目录并在本地保存路径由应用程序本身扫描。因为在SD卡上自动扫描照片指令容易出错。
【问题讨论】:
标签: android file-upload image-uploading photo-gallery photo-upload