CameraRoll 模块提供了对手机中已保存的图片、视频文件进行遍历访问与操作的能力。它主要提供两个静态方法。
static getPhotos(params: object)
这个方法能获取手机里的所有图片和视频,不限于摄像头拍的,也包括其他应用下载的文件。
params 是个对象,包含几个筛选规则:
- first:数值类型,指定想获取多少张图片的信息。
- groupTypes:字符串,默认 SavedPhotos。支持 [Album, All, Event, Faces, Library, PhotoStream],仅限 iOS,用来指定获取图片或视频的类型。
- assetType:字符串,默认 Photos,表示只获取图片,可选 [All, Videos]。
- after:字符串,作为分页游标,记录上一次获取的结束位置,方便接着往下取。这值不能随便写,得存上次返回的结果。 这里有个坑:Android 初始化给 null 就行,但 iOS 直接传 null 会抛未捕获异常导致红屏,务必小心。
返回一个带图片标识符的 Promise。
分批读取技巧
如果要分批次读光所有图,可以监听 ScrollView 滑到底部,配合 after 参数递归调 getPhotos。当 page_info.has_next_page 是 false 时就停。不管 Android 还是 iOS,拿到的 image 对象都能直接塞给 Image 组件显示。
static saveImageWithTag(tag)
把图片存进相册。
- Android:参数是本地 URI,比如
file:///sdcard/img.png。 - iOS:可能是本地 URI、资源库标签,或者非这两类的内存数据(进程期间一直占内存)。
操作成功会返回新 URI 的 Promise。
iOS 平台手动链接配置
有些 iOS 环境必须加链接库,不然会报找不到 API。
- 把
node_modules/react-native/Libraries/CameraRoll/RCTCameraRoll.xcodeproj拖到 Xcode 项目的 Libraries 目录。 - 选项目,右边点 Build Phases,展开 Link Binary With Libraries。
- 打开刚才拖进去的项目,找 Products 目录下的
libRCTCameraRoll.a,拖到上面的列表里。 - Xcode 重新跑一下项目。

