* chore: Upgrade a lot of dependencies for `./` * chore: Upgrade a lot of dependencies for `./example` * chore: Upgrade a lot of dependencies for `./docs` * Use new `EventEmitter` syntax (`.remove()`) * Update Podfile.lock * docs: Use watch mode * docs: Replace all relative links with absolute * Fix all links * Update docusaurus.config.js * Upgrade docusaurus-plugin-typedoc to fix docs build * Update yarn.lock * Upgrade typescript to 4.4.3 * Fix error unknown * Update package.json * Upgrade typedoc * Upgrade a few more deps * Fix deprecated sidebar syntax * Update Gemfile.lock
		
			
				
	
	
		
			188 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ---
 | |
| id: setup
 | |
| title: Getting Started
 | |
| sidebar_label: Getting Started
 | |
| slug: /guides
 | |
| ---
 | |
| 
 | |
| import Tabs from '@theme/Tabs';
 | |
| import TabItem from '@theme/TabItem';
 | |
| import useBaseUrl from '@docusaurus/useBaseUrl';
 | |
| 
 | |
| <div>
 | |
|   <img align="right" width="283" src={useBaseUrl("img/example_intro.png")} />
 | |
| </div>
 | |
| 
 | |
| ## Installing the library
 | |
| 
 | |
| Install [**react-native-vision-camera**](https://www.npmjs.com/package/react-native-vision-camera) through npm:
 | |
| 
 | |
| <Tabs
 | |
|   groupId="environment"
 | |
|   defaultValue="rn"
 | |
|   values={[
 | |
|     {label: 'React Native', value: 'rn'},
 | |
|     {label: 'Expo', value: 'expo'}
 | |
|   ]}>
 | |
| <TabItem value="rn">
 | |
| 
 | |
| ```bash
 | |
| npm i react-native-vision-camera
 | |
| npx pod-install
 | |
| ```
 | |
| 
 | |
| </TabItem>
 | |
| 
 | |
| <TabItem value="expo">
 | |
| 
 | |
| ```bash
 | |
| expo install react-native-vision-camera
 | |
| ```
 | |
| 
 | |
| </TabItem>
 | |
| </Tabs>
 | |
| 
 | |
| VisionCamera requires **iOS 11 or higher**, and **Android-SDK version 21 or higher**. See [Troubleshooting](/docs/guides/troubleshooting) if you're having installation issues.
 | |
| 
 | |
| > **(Optional)** If you want to use [**Frame Processors**](/docs/guides/frame-processors), you need to install [**react-native-reanimated**](https://github.com/software-mansion/react-native-reanimated) 2.2.0 or higher.
 | |
| 
 | |
| ## Updating manifests
 | |
| 
 | |
| To use a Camera or Microphone you must first specify that your app requires camera and microphone permissions.
 | |
| 
 | |
| <Tabs
 | |
|   groupId="environment"
 | |
|   defaultValue="rn"
 | |
|   values={[
 | |
|     {label: 'React Native', value: 'rn'},
 | |
|     {label: 'Expo', value: 'expo'}
 | |
|   ]}>
 | |
| <TabItem value="rn">
 | |
| 
 | |
| ### iOS
 | |
| 
 | |
| Open your project's `Info.plist` and add the following lines inside the outermost `<dict>` tag:
 | |
| 
 | |
| ```xml
 | |
| <key>NSCameraUsageDescription</key>
 | |
| <string>$(PRODUCT_NAME) needs access to your Camera.</string>
 | |
| 
 | |
| <!-- optionally, if you want to record audio: -->
 | |
| <key>NSMicrophoneUsageDescription</key>
 | |
| <string>$(PRODUCT_NAME) needs access to your Microphone.</string>
 | |
| ```
 | |
| 
 | |
| ### Android
 | |
| 
 | |
| Open your project's `AndroidManifest.xml` and add the following lines inside the `<manifest>` tag:
 | |
| 
 | |
| ```xml
 | |
| <uses-permission android:name="android.permission.CAMERA" />
 | |
| 
 | |
| <!-- optionally, if you want to record audio: -->
 | |
| <uses-permission android:name="android.permission.RECORD_AUDIO" />
 | |
| ```
 | |
| 
 | |
| </TabItem>
 | |
| <TabItem value="expo">
 | |
| 
 | |
| ### Managed Expo
 | |
| 
 | |
| Add the VisionCamera plugin to your Expo config (`app.json`, `app.config.json` or `app.config.js`):
 | |
| 
 | |
| ```json
 | |
| {
 | |
|   "name": "my app",
 | |
|   "plugins": [
 | |
|     [
 | |
|       "react-native-vision-camera",
 | |
|       {
 | |
|         "cameraPermissionText": "$(PRODUCT_NAME) needs access to your Camera.",
 | |
| 
 | |
|         // optionally, if you want to record audio:
 | |
|         "enableMicrophonePermission": true,
 | |
|         "microphonePermissionText": "$(PRODUCT_NAME) needs access to your Microphone."
 | |
|       }
 | |
|     ]
 | |
|   ]
 | |
| }
 | |
| ```
 | |
| 
 | |
| Finally, compile the mods:
 | |
| 
 | |
| ```bash
 | |
| expo prebuild
 | |
| ```
 | |
| 
 | |
| To apply the changes, build a new binary with EAS:
 | |
| 
 | |
| ```bash
 | |
| eas build
 | |
| ```
 | |
| 
 | |
| </TabItem>
 | |
| </Tabs>
 | |
| 
 | |
| ## Getting/Requesting Permissions
 | |
| 
 | |
| VisionCamera also provides functions to easily get and request Microphone and Camera permissions.
 | |
| 
 | |
| ### Getting Permissions
 | |
| 
 | |
| Simply use the **get** functions to find out if a user has granted or denied permission before:
 | |
| 
 | |
| ```ts
 | |
| const cameraPermission = await Camera.getCameraPermissionStatus()
 | |
| const microphonePermission = await Camera.getMicrophonePermissionStatus()
 | |
| ```
 | |
| 
 | |
| A permission status can have the following values:
 | |
| 
 | |
| * `authorized`: Your app is authorized to use said permission. Continue with [**using the `<Camera>` view**](#use-the-camera-view).
 | |
| * `not-determined`: Your app has not yet requested permission from the user. [Continue by calling the **request** functions.](#requesting-permissions)
 | |
| * `denied`: Your app has already requested permissions from the user, but was explicitly denied. You cannot use the **request** functions again, but you can use the [`Linking` API](https://reactnative.dev/docs/linking#opensettings) to redirect the user to the Settings App where he can manually grant the permission.
 | |
| * `restricted`: (iOS only) Your app cannot use the Camera or Microphone because that functionality has been restricted, possibly due to active restrictions such as parental controls being in place.
 | |
| 
 | |
| ### Requesting Permissions
 | |
| 
 | |
| Use the **request** functions to prompt the user to give your app permission to use the Camera or Microphone.
 | |
| 
 | |
| :::note
 | |
| The **request** functions only have effect if the current permission status is `not-determined`.
 | |
| :::
 | |
| 
 | |
| ```ts
 | |
| const newCameraPermission = await Camera.requestCameraPermission()
 | |
| const newMicrophonePermission = await Camera.requestMicrophonePermission()
 | |
| ```
 | |
| 
 | |
| The permission request status can have the following values:
 | |
| 
 | |
| * `authorized`: Your app is authorized to use said permission. Continue with [**using the `<Camera>` view**](#use-the-camera-view).
 | |
| * `denied`: The user explicitly denied the permission request alert. You cannot use the **request** functions again, but you can use the [`Linking` API](https://reactnative.dev/docs/linking#opensettings) to redirect the user to the Settings App where he can manually grant the permission.
 | |
| * `restricted`: (iOS only) Your app cannot use the Camera or Microphone because that functionality has been restricted, possibly due to active restrictions such as parental controls being in place.
 | |
| 
 | |
| ## Use the `<Camera>` view
 | |
| 
 | |
| If your app has permission to use the Camera and Microphone, simply use the [`useCameraDevices(...)`](/docs/api#usecameradevices) hook to get a Camera device (see [Camera Devices](/docs/guides/devices)) and mount the `<Camera>` view:
 | |
| 
 | |
| ```tsx
 | |
| function App() {
 | |
|   const devices = useCameraDevices()
 | |
|   const device = devices.back
 | |
| 
 | |
|   if (device == null) return <LoadingView />
 | |
|   return (
 | |
|     <Camera
 | |
|       style={StyleSheet.absoluteFill}
 | |
|       device={device}
 | |
|       isActive={true}
 | |
|     />
 | |
|   )
 | |
| }
 | |
| ```
 | |
| 
 | |
| <br />
 | |
| 
 | |
| #### 🎉 Hooray! You're ready to learn about [Camera Devices](/docs/guides/devices)!
 |