CameraRoll 相册库和拍照API

API兼容性:
QRN:v1.0.0-RC
iOS:80011115
Android:60001130

CameraRoll模块提供了访问本地相册的功能,可以获取用户的相册,并支持拍照和保存照片到相册

引入

import { CameraRoll } from 'qunar-react-native';

数据结构

getPhotosFromGroup 方法第二个参数照片选项的参数结构参见 getPhotosParamChecker:

/**
 * Shape of the param arg for the `getPhotosFromGroup` function.
 */
var getPhotosParamChecker = createStrictShapeTypeChecker({
  /**
   *  需要获取最近照片的数目
   **/
  first: ReactPropTypes.number.isRequired,

  /**
   * 指定从哪一张照片开始获取,这个参数可以通过上次调用 getPhotosFromGroup 
   * 的返回值 getPhotosReturnChecker.edges.page_info.end_cursor获得,
   * 也可以指定任意一个获取图片的 image.uri
   */
  after: ReactPropTypes.string,
});

getPhotosFromGroup 成功获取到的照片后返回的对象结构参见 getPhotosReturnChecker:

/**
 * Shape of the return value of the `getPhotosFromGroup` function.
 */
var getPhotosReturnChecker = createStrictShapeTypeChecker({
  edges: ReactPropTypes.arrayOf(createStrictShapeTypeChecker({
    node: createStrictShapeTypeChecker({
      type: ReactPropTypes.string.isRequired,
      group_name: ReactPropTypes.string.isRequired,
      image: createStrictShapeTypeChecker({
        uri: ReactPropTypes.string.isRequired,
        height: ReactPropTypes.number.isRequired,
        width: ReactPropTypes.number.isRequired,
        isStored: ReactPropTypes.bool,
      }).isRequired,
      timestamp: ReactPropTypes.number.isRequired,
      location: createStrictShapeTypeChecker({
        latitude: ReactPropTypes.number,
        longitude: ReactPropTypes.number,
        altitude: ReactPropTypes.number,
        heading: ReactPropTypes.number,
        speed: ReactPropTypes.number,
      }),
    }).isRequired,
  })).isRequired,
  page_info: createStrictShapeTypeChecker({
    has_next_page: ReactPropTypes.bool.isRequired,
    start_cursor: ReactPropTypes.string,
    end_cursor: ReactPropTypes.string,
  }).isRequired,
});

API

CameraRoll.getPhotoGroups ( callBack: function, errCallBack: function)
获取用户相册信息 callBack返回相册数组,获取失败调用errCallBack
CameraRoll.getPhotosFromGroup ( albumId: string, getPhotosParamChecker, callBack: function, errCallBack: function)
获取指定albumId相册中的照片 获取成功,则callBack返回照片列表信息,否则调用errCallBack
CameraRoll.takePhotoAndSave ( callBack: function, errCallBack: function)
跳转到拍照界面并拍照并保存到系统相册, 如果拍照成功,则callBack返回已保存到照片信息,否则调用errCallBack
CameraRoll.takePhoto (Map params, callBack: function, errCallBack: function)
跳转到拍照界面并拍照,通过params中的 `saveToPhotoAlbum` 参数控制是否保存到系统相册, 如果拍照成功,则callBack返回已保存到照片信息,否则调用errCallBack
  • takePhoto生效版本:Android:60001555,IOS:80011305

使用说明

import { CameraRoll } from 'qunar-react-native';

/**
 * 获取相册列表
 * 成功回调中能够接收到相册列表数组
 */
CameraRoll.getPhotoGroups(albums => {
    //获取相册成功,albums为相册列表数组
    //每个相册信息为{id:相册id,name:相册名称,count:照片数量,coverImage:封面照片uri}
    albums = albums.filter((album) => album.count > 0);//过滤掉没有照片的相册
}, err => {
    console.log(err.message);
});


/**
 * 从相册中获取照片列表
 * 第一个参数为相册id,第二个参数为获取照片选项,页面下方有详细说明
 */
CameraRoll.getPhotosFromGroup(
    album.id, {first: album.count},
    albumData => {
        //照片列表,返回照片的信息
    },
    err => {
        //获取失败
        console.log(err.message);
    }
);


//拍照并存储到相册中,返回照片的信息
CameraRoll.takePhotoAndSave(
    photo => {
        //photo={uri:'ph://EE1C7799-F6E9-42A6-ADBE-88F4FB0C9236/L0/001',width:1024,heigth:2048}
        //photo.uri 	照片uri
        //photo.width	照片宽度
        //photo.height	照片高度
    }, err => {
        //失败,返回失败的原因
        console.log(err.message);
    }
);


//拍照并存储到手机存储或系统相册中,返回照片的信息,api生效版本:Android:60001555,IOS:80011305
CameraRoll.takePhoto(
    {saveToPhotoAlbum: false},//是否保存照片到系统相册,如果保存到系统相册会申请存储/媒体权限,默认是false
    photo => {
        //photo={uri:'ph://EE1C7799-F6E9-42A6-ADBE-88F4FB0C9236/L0/001',width:1024,heigth:2048}
        //photo.uri 	照片uri
        //photo.width	照片宽度
        //photo.height	照片高度
    }, err => {
        //失败,返回失败的原因
        console.log(err.message);
    }
);