Introduction
React native provides many packages to access the gallery and camera. To get all types of media from mobile, react-native provides the cameraRoll. It is a native module of react-native which provides access to the local camera roll or photo library.
Installation using npm:
$ npm install @react-native-community/cameraroll –save
Automatic Linking:
react-native link @react-native-community/cameraroll
Manual Linking
iOS
- In XCode, first, go to the project navigator, then right-click on Libraries ➜ Add Files to [project’s name]
- Go to node_modules ➜ @react-native-community/cameraroll and add RNCCameraroll.xcodeproj
- In XCode, go to the project navigator, select your project. Add libRNCCameraroll.a to your project’s Build Phases tab ➜ Link Binary With Libraries
- Run your project.
Android
- Open android/app/src/main/java/[…]/MainApplication.java file.
- Add import com.reactnativecommunity.cameraroll.CameraRollPackage; to the imports at the top of the file.
- Add new CameraRollPackage() to the list returned by the getPackages() method
- Append the following lines to android/settings.gradle:
include ‘:@react-native-community_cameraroll’ project(‘:@react-native-community_cameraroll’).projectDir = new File(rootProject.projectDir, ‘../node_modules/@react-native-community/cameraroll/android’) - Insert the following lines inside the dependencies section in android/app/build.gradle:
compile project(‘:@react-native-community_cameraroll’)
Permissions:
In android and iOS user permissions are required in order to access cameraRoll and gallery. For iOS you need to add the following permissions in the info.plist file:
<key>NSPhotoLibraryAddUsageDescription</key> <string>$(PRODUCT_NAME) would like to save photos to your photo gallery</string> <key>NSPhotoLibraryUsageDescription</key> <string>$(PRODUCT_NAME) would like access to your photo gallery</string>
Where $(PRODUCT_NAME) is your application name.
For Android. you need to add the following permissions in the AndroidManifest.xml file:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Usage:
import React, {Component} from 'react'; import CameraRoll from "@react-native-community/cameraroll"; export default class App extends Component<Props>{ constructor(props){ super(props); } _handleButtonPress = () => { CameraRoll.getPhotos({ first: 20, assetType: 'Photos', }) .then(r => { this.setState({ photos: r.edges }); }) .catch((err) => { //Error Loading Images }); }; render() { return ( <View> <Button title="Load Images" onPress={this._handleButtonPress} /> <ScrollView> {this.state.photos.map((p, i) => { return ( <Image key={i} style={{ width: 300, height: 100, }} source={{ uri: p.node.image.uri }} /> ); })} </ScrollView> </View> ); } }
The first parameter used in above example is required for cameraRoll.
first : {number} : The number of photos needed in reverse order.
assetType : {string} : Specifies the filter on the asset type. Valid values are:
- All
- Videos
- Photos // default
For example, to get photos and videos only, you can pass Photos|Videos also
There are so many parameters present in it that you can pass for filtration.
Result: The above example will display 20 images from the gallery on Load Images button press.
Being the most extensively used JavaScript library, a jQuery certification will add enormous value to your skill-set. jQuery provides various functionalities to the developer in order to develop complex applications with ease and efficiency.