王胜凯松源草马 發表於 2020-1-11 11:09:00

ReactNative: 了解相机第三方库react-native-camera的使用

<p><span style="font-size: 15px; font-family: 楷体"><strong>一、简介</strong></span></p>
<p><span style="font-size: 14px"><span style="font-family: 楷体">在前一篇文章中,初步介绍了RN提供的关于相机功能</span><span style="font-family: 楷体">CameraRoll的使用了。很多时候,这种最基础的API有时很难满足功能需求,此时,如果不想重复造轮子,我们可以选择一个完善好用的第三库。<span style="font-size: 15px">react-native-camera</span>就是一个非常不错的关于相机功能的第三方库,使用这个框架基本能满足大多数的需求,现在来简单研究一下。</span></span></p>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-family: 楷体"><strong>二、安装</strong></span></p>
<p><span style="font-size: 14px"><span style="font-family: 楷体">1、同样地道理,使用之前得先安装,还是采用npm安装吧。如下:</span></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">安装react-native-camera</span>
npm install react-native-camera@latest --save</pre>
</div>
<p><img src="https://img2018.cnblogs.com/common/791499/202001/791499-20200110161452853-450886686.png"></p>
<p><span style="font-size: 14px; font-family: 楷体">2、安装完成之后,需要添加工程,进行编译配置。执行完了这些步骤后,就完成了第三方库的添加了。</span></p>
<p><span style="font-size: 14px; font-family: 楷体">(1)打开xcode,找到Libraries文件,添加安装的</span><span style="font-family: 楷体; font-size: 15px">react-native-camera</span><span style="font-family: 楷体; font-size: 14px">目录下的RNCamera.xcodeproj工程</span></p>
<p><span style="font-family: 楷体; font-size: 14px"><img src="https://img2018.cnblogs.com/common/791499/202001/791499-20200110162336753-1700224922.png"></span></p>
<p><span style="font-family: 楷体; font-size: 14px">(2)添加libRNCamera.a静态库</span></p>
<p><span style="font-family: 楷体; font-size: 14px"><img src="https://img2018.cnblogs.com/common/791499/202001/791499-20200110162402548-1708737389.png"></span></p>
<p><span style="font-family: 楷体; font-size: 14px">(3)找到并选中添加的RNCamera.xcodeproj工程,配置Build Settings选项卡中的Header Search Paths路径</span></p>
<p><span style="font-size: 14px; font-family: 楷体"><img src="https://img2018.cnblogs.com/common/791499/202001/791499-20200110162430262-816509317.png"></span></p>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-family: 楷体"><strong>三、API</strong></span></p>
<p><span style="font-size: 14px; font-family: 楷体"><span style="font-family: 楷体">1、类RNCamera的定义如下:包含静态常量和函数</span></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">类RNCamera
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">继承RNCameraProps属性和ViewProperties属性</span>
export <span style="color: rgba(0, 0, 255, 1)">class</span> RNCamera extends Component&lt;RNCameraProps &amp; ViewProperties&gt;<span style="color: rgba(0, 0, 0, 1)"> {

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">静态常量(属性),只读,不可修改</span>
<span style="color: rgba(0, 0, 255, 1)">static</span><span style="color: rgba(0, 0, 0, 1)"> Constants: Constants;

_cameraRef: </span><span style="color: rgba(0, 0, 255, 1)">null</span> |<span style="color: rgba(0, 0, 0, 1)"> NativeMethodsMixinStatic;
_cameraHandle: ReturnType</span>&lt;<span style="color: rgba(0, 0, 255, 1)">typeof</span> findNodeHandle&gt;<span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">异步拍照
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">参数 TakePictureOptions:表示的一下拍照时相机的配置选项
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">返回值 Promise: 异步函数,TakePictureResponse为拍照的响应</span>
takePictureAsync(options?: TakePictureOptions): Promise&lt;TakePictureResponse&gt;<span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">异步录制
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">参数 RecordOptions:表示的一下录制时相机的配置选项
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">返回值 Promise: 异步函数,RecordResponse为录制的响应</span>
recordAsync(options?: RecordOptions): Promise&lt;RecordResponse&gt;<span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">刷新认证状态
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">返回值 Promise: 异步函数,void无结果</span>
refreshAuthorizationStatus(): Promise&lt;<span style="color: rgba(0, 0, 255, 1)">void</span>&gt;<span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">停止录制</span>
stopRecording(): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">暂停预览</span>
pausePreview(): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">恢复预览</span>
resumePreview(): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取可用的图片的尺寸
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">返回值 Promise: 异步函数,字符串结果</span>
getAvailablePictureSizes(): Promise&lt;<span style="color: rgba(0, 0, 255, 1)">string</span>[]&gt;<span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Android only </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">是否支持异步比率</span>
getSupportedRatiosAsync(): Promise&lt;<span style="color: rgba(0, 0, 255, 1)">string</span>[]&gt;<span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* iOS only </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">是否正在录制</span>
isRecording(): Promise&lt;boolean&gt;<span style="color: rgba(0, 0, 0, 1)">;
}</span></pre>
</div>
<p><span style="font-size: 14px; font-family: 楷体">2、关于RNCameraProps、Constants、TakePictureOptions、TakePictureResponse、RecordOptions、RecordResponse这些对象的定义,分别如下:</span></p>
<p><span style="font-size: 14px; font-family: 楷体">RNCameraProps:相机的配置属性</span></p>
<div class="cnblogs_code">
<pre>export <span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> RNCameraProps {
children</span>?: ReactNode |<span style="color: rgba(0, 0, 0, 1)"> FaCC;

autoFocus</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof AutoFocus;
autoFocusPointOfInterest</span>?<span style="color: rgba(0, 0, 0, 1)">: Point;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> iOS only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onSubjectAreaChanged</span>?: (<span style="color: rgba(0, 0, 255, 1)">event</span>: { nativeEvent: { prevPoint: { x: number; y: number; } } }) =&gt; <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
type</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof CameraType;
flashMode</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof FlashMode;
notAuthorizedView</span>?<span style="color: rgba(0, 0, 0, 1)">: JSX.Element;
pendingAuthorizationView</span>?<span style="color: rgba(0, 0, 0, 1)">: JSX.Element;
useCamera2Api</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
exposure</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
whiteBalance</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof WhiteBalance;
captureAudio</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;

onCameraReady</span>?(): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
onStatusChange</span>?(<span style="color: rgba(0, 0, 255, 1)">event</span><span style="color: rgba(0, 0, 0, 1)">: {
    cameraStatus: keyof CameraStatus;
    recordAudioPermissionStatus: keyof RecordAudioPermissionStatus;
}): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
onMountError</span>?(error: { message: <span style="color: rgba(0, 0, 255, 1)">string</span> }): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* iOS only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onAudioInterrupted</span>?(): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
onAudioConnected</span>?(): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Value: float from 0 to 1.0 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
zoom</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* iOS only. float from 0 to any. Locks the max zoom value to the provided value
    A value &lt;= 1 will use the camera's max zoom, while a value &gt; 1
    will use that value as the max available zoom
*</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
maxZoom</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Value: float from 0 to 1.0 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
focusDepth</span>?<span style="color: rgba(0, 0, 0, 1)">: number;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> -- BARCODE PROPS</span>
barCodeTypes?: Array&lt;keyof BarCodeType&gt;<span style="color: rgba(0, 0, 0, 1)">;
googleVisionBarcodeType</span>?: Constants[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">GoogleVisionBarcodeDetection</span><span style="color: rgba(128, 0, 0, 1)">'</span>][<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">BarcodeType</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">];
googleVisionBarcodeMode</span>?: Constants[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">GoogleVisionBarcodeDetection</span><span style="color: rgba(128, 0, 0, 1)">'</span>][<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">BarcodeMode</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">];
onBarCodeRead</span>?(<span style="color: rgba(0, 0, 255, 1)">event</span><span style="color: rgba(0, 0, 0, 1)">: {
    data: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    rawData</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    type: keyof BarCodeType;
    </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * @description For Android use `{ width: number, height: number, origin: Array&lt;Point&lt;string&gt;&gt; }`
   * @description For iOS use `{ origin: Point&lt;string&gt;, size: Size&lt;string&gt; }`
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
    bounds: { width: number, height: number, origin: Array</span>&lt;Point&lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;&gt; } | { origin: Point&lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;; size: Size&lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;<span style="color: rgba(0, 0, 0, 1)"> };
}): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;

onGoogleVisionBarcodesDetected</span>?(<span style="color: rgba(0, 0, 255, 1)">event</span><span style="color: rgba(0, 0, 0, 1)">: {
    barcodes: Barcode[];
}): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> -- FACE DETECTION PROPS</span>
<span style="color: rgba(0, 0, 0, 1)">
onFacesDetected</span>?(response: { faces: Face[] }): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
onFaceDetectionError</span>?(response: { isOperational: boolean }): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
faceDetectionMode</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof FaceDetectionMode;
faceDetectionLandmarks</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof FaceDetectionLandmarks;
faceDetectionClassifications</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof FaceDetectionClassifications;
trackingEnabled</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;

onTextRecognized</span>?(response: { textBlocks: TrackedTextFeature[] }): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> -- ANDROID ONLY PROPS</span>
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Android only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
ratio</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Android only - Deprecated </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
permissionDialogTitle</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Android only - Deprecated </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
permissionDialogMessage</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Android only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
playSoundOnCapture</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;

androidCameraPermissionOptions</span>?<span style="color: rgba(0, 0, 0, 1)">: {
    title: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    message: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    buttonPositive</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    buttonNegative</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    buttonNeutral</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
} </span>| <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;

androidRecordAudioPermissionOptions</span>?<span style="color: rgba(0, 0, 0, 1)">: {
    title: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    message: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    buttonPositive</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    buttonNegative</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    buttonNeutral</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
} </span>| <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> -- IOS ONLY PROPS</span>
defaultVideoQuality?<span style="color: rgba(0, 0, 0, 1)">: keyof VideoQuality;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> if true, audio session will not be released on component unmount </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
keepAudioSession</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
}</span></pre>
</div>
<p><span style="font-size: 14px; font-family: 楷体">Constants:相机的静态常量属性,都是只读的</span></p>
<div class="cnblogs_code">
<pre>export <span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> Constants {
CameraStatus: CameraStatus;
AutoFocus: AutoFocus;
FlashMode: FlashMode;
VideoCodec: VideoCodec;
Type: CameraType;
WhiteBalance: WhiteBalance;
VideoQuality: VideoQuality;
BarCodeType: BarCodeType;
FaceDetection: {
    Classifications: FaceDetectionClassifications;
    Landmarks: FaceDetectionLandmarks;
    Mode: FaceDetectionMode;
};
GoogleVisionBarcodeDetection: {
    BarcodeType: GoogleVisionBarcodeType;
    BarcodeMode: GoogleVisionBarcodeMode;
};
Orientation: {
    auto: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">auto</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
    landscapeLeft: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">landscapeLeft</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
    landscapeRight: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">landscapeRight</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
    portrait: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">portrait</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
    portraitUpsideDown: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">portraitUpsideDown</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
};
}</span></pre>
</div>
<p><span style="font-size: 14px; font-family: 楷体">TakePictureOptions:拍照时的配置选项</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> TakePictureOptions {
quality</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
orientation</span>?: keyof Orientation |<span style="color: rgba(0, 0, 0, 1)"> OrientationNumber;
base64</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
exif</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
width</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
mirrorImage</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
doNotSave</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
pauseAfterCapture</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
writeExif</span>?: boolean | { : any };

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Android only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
fixOrientation</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* iOS only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
forceUpOrientation</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
}</span></pre>
</div>
<p><span style="font-size: 14px; font-family: 楷体">TakePictureResponse:拍照后的响应结果</span></p>
<div class="cnblogs_code">
<pre>export <span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> TakePictureResponse {
width: number;
height: number;
uri: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
base64</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
exif</span>?: { : any };
pictureOrientation: number;
deviceOrientation: number;
}</span></pre>
</div>
<p><span style="font-size: 14px; font-family: 楷体">RecordOptions:录制时的配置选项</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> RecordOptions {
quality</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof VideoQuality;
orientation</span>?: keyof Orientation |<span style="color: rgba(0, 0, 0, 1)"> OrientationNumber;
maxDuration</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
maxFileSize</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
mute</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
mirrorVideo</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
path</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
videoBitrate</span>?<span style="color: rgba(0, 0, 0, 1)">: number;

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* iOS only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
codec</span>?: keyof VideoCodec |<span style="color: rgba(0, 0, 0, 1)"> VideoCodec;
}</span></pre>
</div>
<p><span style="font-size: 14px; font-family: 楷体">RecordResponse:录制后的响应结果</span></p>
<div class="cnblogs_code">
<pre>export <span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> RecordResponse {
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Path to the video saved on your app's cache directory. </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
uri: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
videoOrientation: number;
deviceOrientation: number;
isRecordingInterrupted: boolean;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* iOS only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
codec: VideoCodec;
}</span></pre>
</div>
<p><span style="font-size: 14px; font-family: 楷体">3、更多的介绍请查看完整文件,如下:</span></p>
<div class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_be729fdd-2472-437e-ae04-25c2ac1a2def" class="code_img_opened lazyload" style="display: none" alt="" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_be729fdd-2472-437e-ae04-25c2ac1a2def" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Type definitions for react-native-camera 1.0
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Definitions by: Felipe Constantino &lt;</span><span style="color: rgba(0, 128, 0, 1); text-decoration: underline">https://github.com/fconstant</span><span style="color: rgba(0, 128, 0, 1)">&gt;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">               Trent Jones &lt;</span><span style="color: rgba(0, 128, 0, 1); text-decoration: underline">https://github.com/FizzBuzz791</span><span style="color: rgba(0, 128, 0, 1)">&gt;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> If you modify this file, put your GitHub info here as well (for easy contacting purposes)</span>

<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
* Author notes:
* I've tried to find a easy tool to convert from Flow to Typescript definition files (.d.ts).
* So we woudn't have to do it manually... Sadly, I haven't found it.
*
* If you are seeing this from the future, please, send us your cutting-edge technology :) (if it exists)
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
import { Component, ReactNode } from </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">react</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
import { NativeMethodsMixinStatic, ViewProperties, findNodeHandle } from </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">react-native</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;

type Orientation </span>= Readonly&lt;<span style="color: rgba(0, 0, 0, 1)">{
auto: any;
landscapeLeft: any;
landscapeRight: any;
portrait: any;
portraitUpsideDown: any;
}</span>&gt;<span style="color: rgba(0, 0, 0, 1)">;
type OrientationNumber </span>= <span style="color: rgba(128, 0, 128, 1)">1</span> | <span style="color: rgba(128, 0, 128, 1)">2</span> | <span style="color: rgba(128, 0, 128, 1)">3</span> | <span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">;
type AutoFocus </span>= Readonly&lt;{ on: any; off: any }&gt;<span style="color: rgba(0, 0, 0, 1)">;
type FlashMode </span>= Readonly&lt;{ on: any; off: any; torch: any; auto: any }&gt;<span style="color: rgba(0, 0, 0, 1)">;
type CameraType </span>= Readonly&lt;{ front: any; back: any }&gt;<span style="color: rgba(0, 0, 0, 1)">;
type WhiteBalance </span>= Readonly&lt;<span style="color: rgba(0, 0, 0, 1)">{
sunny: any;
cloudy: any;
shadow: any;
incandescent: any;
fluorescent: any;
auto: any;
}</span>&gt;<span style="color: rgba(0, 0, 0, 1)">;
type BarCodeType </span>= Readonly&lt;<span style="color: rgba(0, 0, 0, 1)">{
aztec: any;
code128: any;
code39: any;
code39mod43: any;
code93: any;
ean13: any;
ean8: any;
pdf417: any;
qr: any;
upc_e: any;
interleaved2of5: any;
itf14: any;
datamatrix: any;
}</span>&gt;<span style="color: rgba(0, 0, 0, 1)">;
type VideoQuality </span>= Readonly&lt;<span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">2160p</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">: any;
</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1080p</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">: any;
</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">720p</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">: any;
</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">480p</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">: any;
</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">4:3</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">: any;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* iOS Only. Android not supported. </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">288p</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">: any;
}</span>&gt;<span style="color: rgba(0, 0, 0, 1)">;
type VideoCodec </span>= Readonly&lt;<span style="color: rgba(0, 0, 0, 1)">{
H264: symbol;
JPEG: symbol;
HVEC: symbol;
AppleProRes422: symbol;
AppleProRes4444: symbol;
}</span>&gt;<span style="color: rgba(0, 0, 0, 1)">;

type FaceDetectionClassifications </span>= Readonly&lt;{ all: any; none: any }&gt;<span style="color: rgba(0, 0, 0, 1)">;
type FaceDetectionLandmarks </span>= Readonly&lt;{ all: any; none: any }&gt;<span style="color: rgba(0, 0, 0, 1)">;
type FaceDetectionMode </span>= Readonly&lt;{ fast: any; accurate: any }&gt;<span style="color: rgba(0, 0, 0, 1)">;
type GoogleVisionBarcodeType </span>= Readonly&lt;<span style="color: rgba(0, 0, 0, 1)">{
CODE_128: any;
CODE_39: any;
CODABAR: any;
DATA_MATRIX: any;
EAN_13: any;
EAN_8: any;
ITF: any;
QR_CODE: any;
UPC_A: any;
UPC_E: any;
PDF417: any;
AZTEC: any;
ALL: any;
}</span>&gt;<span style="color: rgba(0, 0, 0, 1)">;
type GoogleVisionBarcodeMode </span>= Readonly&lt;{ NORMAL: any; ALTERNATE: any; INVERTED: any }&gt;<span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> FaCC (Function as Child Components)</span>
type Self&lt;T&gt; = { : P };
type CameraStatus </span>= Readonly&lt;Self&lt;{ READY: any; PENDING_AUTHORIZATION: any; NOT_AUTHORIZED: any }&gt;&gt;<span style="color: rgba(0, 0, 0, 1)">;
type RecordAudioPermissionStatus </span>= Readonly&lt;<span style="color: rgba(0, 0, 0, 1)">
Self</span>&lt;<span style="color: rgba(0, 0, 0, 1)">{
    AUTHORIZED: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">AUTHORIZED</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
    PENDING_AUTHORIZATION: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">PENDING_AUTHORIZATION</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
    NOT_AUTHORIZED: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">NOT_AUTHORIZED</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
}</span>&gt;
&gt;<span style="color: rgba(0, 0, 0, 1)">;
type FaCC </span>=<span style="color: rgba(0, 0, 0, 1)"> (
</span><span style="color: rgba(0, 0, 255, 1)">params</span><span style="color: rgba(0, 0, 0, 1)">: {
    camera: RNCamera;
    status: keyof CameraStatus;
    recordAudioPermissionStatus: keyof RecordAudioPermissionStatus;
},
) </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> JSX.Element;

export </span><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> Constants {
CameraStatus: CameraStatus;
AutoFocus: AutoFocus;
FlashMode: FlashMode;
VideoCodec: VideoCodec;
Type: CameraType;
WhiteBalance: WhiteBalance;
VideoQuality: VideoQuality;
BarCodeType: BarCodeType;
FaceDetection: {
    Classifications: FaceDetectionClassifications;
    Landmarks: FaceDetectionLandmarks;
    Mode: FaceDetectionMode;
};
GoogleVisionBarcodeDetection: {
    BarcodeType: GoogleVisionBarcodeType;
    BarcodeMode: GoogleVisionBarcodeMode;
};
Orientation: {
    auto: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">auto</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
    landscapeLeft: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">landscapeLeft</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
    landscapeRight: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">landscapeRight</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
    portrait: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">portrait</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
    portraitUpsideDown: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">portraitUpsideDown</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
};
}

export </span><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> RNCameraProps {
children</span>?: ReactNode |<span style="color: rgba(0, 0, 0, 1)"> FaCC;

autoFocus</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof AutoFocus;
autoFocusPointOfInterest</span>?<span style="color: rgba(0, 0, 0, 1)">: Point;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> iOS only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onSubjectAreaChanged</span>?: (<span style="color: rgba(0, 0, 255, 1)">event</span>: { nativeEvent: { prevPoint: { x: number; y: number; } } }) =&gt; <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
type</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof CameraType;
flashMode</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof FlashMode;
notAuthorizedView</span>?<span style="color: rgba(0, 0, 0, 1)">: JSX.Element;
pendingAuthorizationView</span>?<span style="color: rgba(0, 0, 0, 1)">: JSX.Element;
useCamera2Api</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
exposure</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
whiteBalance</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof WhiteBalance;
captureAudio</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;

onCameraReady</span>?(): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
onStatusChange</span>?(<span style="color: rgba(0, 0, 255, 1)">event</span><span style="color: rgba(0, 0, 0, 1)">: {
    cameraStatus: keyof CameraStatus;
    recordAudioPermissionStatus: keyof RecordAudioPermissionStatus;
}): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
onMountError</span>?(error: { message: <span style="color: rgba(0, 0, 255, 1)">string</span> }): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* iOS only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onAudioInterrupted</span>?(): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
onAudioConnected</span>?(): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Value: float from 0 to 1.0 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
zoom</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* iOS only. float from 0 to any. Locks the max zoom value to the provided value
    A value &lt;= 1 will use the camera's max zoom, while a value &gt; 1
    will use that value as the max available zoom
*</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
maxZoom</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Value: float from 0 to 1.0 </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
focusDepth</span>?<span style="color: rgba(0, 0, 0, 1)">: number;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> -- BARCODE PROPS</span>
barCodeTypes?: Array&lt;keyof BarCodeType&gt;<span style="color: rgba(0, 0, 0, 1)">;
googleVisionBarcodeType</span>?: Constants[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">GoogleVisionBarcodeDetection</span><span style="color: rgba(128, 0, 0, 1)">'</span>][<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">BarcodeType</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">];
googleVisionBarcodeMode</span>?: Constants[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">GoogleVisionBarcodeDetection</span><span style="color: rgba(128, 0, 0, 1)">'</span>][<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">BarcodeMode</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">];
onBarCodeRead</span>?(<span style="color: rgba(0, 0, 255, 1)">event</span><span style="color: rgba(0, 0, 0, 1)">: {
    data: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    rawData</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    type: keyof BarCodeType;
    </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * @description For Android use `{ width: number, height: number, origin: Array&lt;Point&lt;string&gt;&gt; }`
   * @description For iOS use `{ origin: Point&lt;string&gt;, size: Size&lt;string&gt; }`
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
    bounds: { width: number, height: number, origin: Array</span>&lt;Point&lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;&gt; } | { origin: Point&lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;; size: Size&lt;<span style="color: rgba(0, 0, 255, 1)">string</span>&gt;<span style="color: rgba(0, 0, 0, 1)"> };
}): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;

onGoogleVisionBarcodesDetected</span>?(<span style="color: rgba(0, 0, 255, 1)">event</span><span style="color: rgba(0, 0, 0, 1)">: {
    barcodes: Barcode[];
}): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> -- FACE DETECTION PROPS</span>
<span style="color: rgba(0, 0, 0, 1)">
onFacesDetected</span>?(response: { faces: Face[] }): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
onFaceDetectionError</span>?(response: { isOperational: boolean }): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
faceDetectionMode</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof FaceDetectionMode;
faceDetectionLandmarks</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof FaceDetectionLandmarks;
faceDetectionClassifications</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof FaceDetectionClassifications;
trackingEnabled</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;

onTextRecognized</span>?(response: { textBlocks: TrackedTextFeature[] }): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> -- ANDROID ONLY PROPS</span>
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Android only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
ratio</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Android only - Deprecated </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
permissionDialogTitle</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Android only - Deprecated </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
permissionDialogMessage</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Android only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
playSoundOnCapture</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;

androidCameraPermissionOptions</span>?<span style="color: rgba(0, 0, 0, 1)">: {
    title: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    message: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    buttonPositive</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    buttonNegative</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    buttonNeutral</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
} </span>| <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;

androidRecordAudioPermissionOptions</span>?<span style="color: rgba(0, 0, 0, 1)">: {
    title: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    message: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    buttonPositive</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    buttonNegative</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    buttonNeutral</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
} </span>| <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> -- IOS ONLY PROPS</span>
defaultVideoQuality?<span style="color: rgba(0, 0, 0, 1)">: keyof VideoQuality;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> if true, audio session will not be released on component unmount </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
keepAudioSession</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
}

</span><span style="color: rgba(0, 0, 255, 1)">interface</span> Point&lt;T = number&gt;<span style="color: rgba(0, 0, 0, 1)"> {
x: T;
y: T;
}

</span><span style="color: rgba(0, 0, 255, 1)">interface</span> Size&lt;T = number&gt;<span style="color: rgba(0, 0, 0, 1)"> {
width: T;
height: T;
}

export </span><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> Barcode {
bounds: {
    size: Size;
    origin: Point;
};
data: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
dataRaw: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
type: BarcodeType;
format</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
addresses</span>?<span style="color: rgba(0, 0, 0, 1)">: {
    addressesType</span>?: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">UNKNOWN</span><span style="color: rgba(128, 0, 0, 1)">"</span> | <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Work</span><span style="color: rgba(128, 0, 0, 1)">"</span> | <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Home</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
    addressLines</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">[];
}[];
emails</span>?<span style="color: rgba(0, 0, 0, 1)">: Email[];
phones</span>?<span style="color: rgba(0, 0, 0, 1)">: Phone[];
urls</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">[];
name</span>?<span style="color: rgba(0, 0, 0, 1)">: {
    firstName</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    lastName</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    middleName</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    prefix</span>?:<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    pronounciation</span>?:<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    suffix</span>?:<span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
    formattedName</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
};
phone</span>?<span style="color: rgba(0, 0, 0, 1)">: Phone;
organization</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
latitude</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
longitude</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
ssid</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
password</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
encryptionType</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
title</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
url</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
firstName</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
middleName</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
lastName</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
gender</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
addressCity</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
addressState</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
addressStreet</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
addressZip</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
birthDate</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
documentType</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
licenseNumber</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
expiryDate</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
issuingDate</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
issuingCountry</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
eventDescription</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
location</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
organizer</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
status</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
summary</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
start</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
end</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
email</span>?<span style="color: rgba(0, 0, 0, 1)">: Email;
phoneNumber</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
message</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
}

export type BarcodeType </span>=
|<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">EMAIL</span><span style="color: rgba(128, 0, 0, 1)">"</span>
|<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">PHONE</span><span style="color: rgba(128, 0, 0, 1)">"</span>
|<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">CALENDAR_EVENT</span><span style="color: rgba(128, 0, 0, 1)">"</span>
|<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">DRIVER_LICENSE</span><span style="color: rgba(128, 0, 0, 1)">"</span>
|<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">GEO</span><span style="color: rgba(128, 0, 0, 1)">"</span>
|<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">SMS</span><span style="color: rgba(128, 0, 0, 1)">"</span>
|<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">CONTACT_INFO</span><span style="color: rgba(128, 0, 0, 1)">"</span>
|<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">WIFI</span><span style="color: rgba(128, 0, 0, 1)">"</span>
|<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">TEXT</span><span style="color: rgba(128, 0, 0, 1)">"</span>
|<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ISBN</span><span style="color: rgba(128, 0, 0, 1)">"</span>
|<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">PRODUCT</span><span style="color: rgba(128, 0, 0, 1)">"</span>
|<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">URL</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">

export </span><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> Email {
address</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
body</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
subject</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
emailType</span>?: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">UNKNOWN</span><span style="color: rgba(128, 0, 0, 1)">"</span> | <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Work</span><span style="color: rgba(128, 0, 0, 1)">"</span> | <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Home</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
}

export </span><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> Phone {
number</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
phoneType</span>?: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">UNKNOWN</span><span style="color: rgba(128, 0, 0, 1)">"</span> | <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Work</span><span style="color: rgba(128, 0, 0, 1)">"</span> | <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Home</span><span style="color: rgba(128, 0, 0, 1)">"</span> | <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Fax</span><span style="color: rgba(128, 0, 0, 1)">"</span> | <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Mobile</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
}

export </span><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> Face {
faceID</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
bounds: {
    size: Size;
    origin: Point;
};
smilingProbability</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
leftEarPosition</span>?<span style="color: rgba(0, 0, 0, 1)">: Point;
rightEarPosition</span>?<span style="color: rgba(0, 0, 0, 1)">: Point;
leftEyePosition</span>?<span style="color: rgba(0, 0, 0, 1)">: Point;
leftEyeOpenProbability</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
rightEyePosition</span>?<span style="color: rgba(0, 0, 0, 1)">: Point;
rightEyeOpenProbability</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
leftCheekPosition</span>?<span style="color: rgba(0, 0, 0, 1)">: Point;
rightCheekPosition</span>?<span style="color: rgba(0, 0, 0, 1)">: Point;
leftMouthPosition</span>?<span style="color: rgba(0, 0, 0, 1)">: Point;
mouthPosition</span>?<span style="color: rgba(0, 0, 0, 1)">: Point;
rightMouthPosition</span>?<span style="color: rgba(0, 0, 0, 1)">: Point;
bottomMouthPosition</span>?<span style="color: rgba(0, 0, 0, 1)">: Point;
noseBasePosition</span>?<span style="color: rgba(0, 0, 0, 1)">: Point;
yawAngle</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
rollAngle</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
}

export </span><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> TrackedTextFeature {
type: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">block</span><span style="color: rgba(128, 0, 0, 1)">'</span> | <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">line</span><span style="color: rgba(128, 0, 0, 1)">'</span> | <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">element</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
bounds: {
    size: Size;
    origin: Point;
};
value: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
components: TrackedTextFeature[];
}

</span><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> TakePictureOptions {
quality</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
orientation</span>?: keyof Orientation |<span style="color: rgba(0, 0, 0, 1)"> OrientationNumber;
base64</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
exif</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
width</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
mirrorImage</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
doNotSave</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
pauseAfterCapture</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
writeExif</span>?: boolean | { : any };

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Android only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
fixOrientation</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* iOS only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
forceUpOrientation</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
}

export </span><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> TakePictureResponse {
width: number;
height: number;
uri: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
base64</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
exif</span>?: { : any };
pictureOrientation: number;
deviceOrientation: number;
}

</span><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> RecordOptions {
quality</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof VideoQuality;
orientation</span>?: keyof Orientation |<span style="color: rgba(0, 0, 0, 1)"> OrientationNumber;
maxDuration</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
maxFileSize</span>?<span style="color: rgba(0, 0, 0, 1)">: number;
mute</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
mirrorVideo</span>?<span style="color: rgba(0, 0, 0, 1)">: boolean;
path</span>?: <span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
videoBitrate</span>?<span style="color: rgba(0, 0, 0, 1)">: number;

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* iOS only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
codec</span>?: keyof VideoCodec |<span style="color: rgba(0, 0, 0, 1)"> VideoCodec;
}

export </span><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> RecordResponse {
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Path to the video saved on your app's cache directory. </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
uri: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
videoOrientation: number;
deviceOrientation: number;
isRecordingInterrupted: boolean;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* iOS only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
codec: VideoCodec;
}

export </span><span style="color: rgba(0, 0, 255, 1)">class</span> RNCamera extends Component&lt;RNCameraProps &amp; ViewProperties&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">static</span><span style="color: rgba(0, 0, 0, 1)"> Constants: Constants;

_cameraRef: </span><span style="color: rgba(0, 0, 255, 1)">null</span> |<span style="color: rgba(0, 0, 0, 1)"> NativeMethodsMixinStatic;
_cameraHandle: ReturnType</span>&lt;<span style="color: rgba(0, 0, 255, 1)">typeof</span> findNodeHandle&gt;<span style="color: rgba(0, 0, 0, 1)">;

takePictureAsync(options</span>?: TakePictureOptions): Promise&lt;TakePictureResponse&gt;<span style="color: rgba(0, 0, 0, 1)">;
recordAsync(options</span>?: RecordOptions): Promise&lt;RecordResponse&gt;<span style="color: rgba(0, 0, 0, 1)">;
refreshAuthorizationStatus(): Promise</span>&lt;<span style="color: rgba(0, 0, 255, 1)">void</span>&gt;<span style="color: rgba(0, 0, 0, 1)">;
stopRecording(): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
pausePreview(): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
resumePreview(): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">;
getAvailablePictureSizes(): Promise</span>&lt;<span style="color: rgba(0, 0, 255, 1)">string</span>[]&gt;<span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* Android only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
getSupportedRatiosAsync(): Promise</span>&lt;<span style="color: rgba(0, 0, 255, 1)">string</span>[]&gt;<span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* iOS only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
isRecording(): Promise</span>&lt;boolean&gt;<span style="color: rgba(0, 0, 0, 1)">;
}

</span><span style="color: rgba(0, 0, 255, 1)">interface</span><span style="color: rgba(0, 0, 0, 1)"> DetectionOptions {
mode</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof FaceDetectionMode;
detectLandmarks</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof FaceDetectionLandmarks;
runClassifications</span>?<span style="color: rgba(0, 0, 0, 1)">: keyof FaceDetectionClassifications;
}

export </span><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> FaceDetector {
</span><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> constructor();
</span><span style="color: rgba(0, 0, 255, 1)">static</span> Constants: Constants[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">FaceDetection</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">];
</span><span style="color: rgba(0, 0, 255, 1)">static</span> detectFacesAsync(uri: <span style="color: rgba(0, 0, 255, 1)">string</span>, options?: DetectionOptions): Promise&lt;Face[]&gt;<span style="color: rgba(0, 0, 0, 1)">;
}

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> -- DEPRECATED CONTENT BELOW</span>

<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* @deprecated As of 1.0.0 release, RCTCamera is deprecated. Please use RNCamera for the latest fixes and improvements.
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
export </span><span style="color: rgba(0, 0, 255, 1)">default</span> <span style="color: rgba(0, 0, 255, 1)">class</span> RCTCamera extends Component&lt;any&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">static</span><span style="color: rgba(0, 0, 0, 1)"> constants: any;
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>&nbsp;</p>
<p><span style="font-size: 15px; font-family: 楷体"><span style="font-family: 楷体">四、使用</span></span></p>
<p><span style="font-family: 楷体">实现一个摄像头切换、扫描二维码功能。(模拟器无法调起相机)请使用真机测试。</span></p>
<p><span style="font-family: 楷体">切记要添加授权字段:Privacy - Camera Usage Description、Privacy - Microphone Usage Description。代码示例如下:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* Sample React Native App
* </span><span style="color: rgba(0, 128, 0, 1); text-decoration: underline">https://github.com/facebook/react-native</span><span style="color: rgba(0, 128, 0, 1)">
* @flow
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">

import React, { Component } from </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">react</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;

import {
    AppRegistry,
    StyleSheet,
    Text,
    TouchableHighlight
} from </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">react-native</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;

import {RNCamera, TakePictureResponse} from </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">react-native-camera</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;

export </span><span style="color: rgba(0, 0, 255, 1)">default</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> ReactNativeDemo extends Component {

    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置当前摄像头为后置摄像头</span>
    state =<span style="color: rgba(0, 0, 0, 1)"> { cameraType: RNCamera.Constants.Type.back };

    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">扫描二维码</span>
<span style="color: rgba(0, 0, 0, 1)">    _onBarCodeRead(e){
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">data: string;
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">rawData?: string;
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">type: keyof BarCodeType;
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">bounds:
          </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">For iOS use `{ origin: Point&lt;string&gt;, size: Size&lt;string&gt; }`
          </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">For Android use `{ width: number, height: number, origin: Array&lt;Point&lt;string&gt;&gt; }`</span>
<span style="color: rgba(0, 0, 0, 1)">      console.log(e)
    }

    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">切换摄像头方向   undefined is not an object (evaluating 'state.cameraType')</span>
<span style="color: rgba(0, 0, 0, 1)">    _switchCamera(){
      </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setState({
            cameraType: (</span><span style="color: rgba(0, 0, 255, 1)">this</span>.state.cameraType === RNCamera.Constants.Type.back) ?<span style="color: rgba(0, 0, 0, 1)">
                RNCamera.Constants.Type.front : RNCamera.Constants.Type.back
      })
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> let state = this.state;
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> state.cameraType = (state.cameraType === RNCamera.Constants.Type.back) ?
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   RNCamera.Constants.Type.front : RNCamera.Constants.Type.back;
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> this.setState(state);</span>
<span style="color: rgba(0, 0, 0, 1)">    }

    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">拍摄照片</span>
<span style="color: rgba(0, 0, 0, 1)">    _takePicture(){
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.refs.camera.takePictureAsync().then( (response) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            console.log(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">response.uri:</span><span style="color: rgba(128, 0, 0, 1)">"</span>+<span style="color: rgba(0, 0, 0, 1)">response.uri)
      }).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>((error =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            console.log(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">error:</span><span style="color: rgba(128, 0, 0, 1)">"</span>+<span style="color: rgba(0, 0, 0, 1)">error)
      }))
    }

    render() {
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> (
            </span>&lt;<span style="color: rgba(0, 0, 0, 1)">RNCamera
                </span><span style="color: rgba(0, 0, 255, 1)">ref</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">camera</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
                style</span>=<span style="color: rgba(0, 0, 0, 1)">{styles.container}
                onBarCodeRead</span>={<span style="color: rgba(0, 0, 255, 1)">this</span>._onBarCodeRead.bind(<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">)}
                type</span>={<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.state.cameraType}
            </span>&gt;
                &lt;TouchableHighlight onPress={<span style="color: rgba(0, 0, 255, 1)">this</span>._switchCamera.bind(<span style="color: rgba(0, 0, 255, 1)">this</span>)}&gt;
                  &lt;Text style={styles.<span style="color: rgba(0, 0, 255, 1)">switch</span>}&gt;Switch Camera&lt;/Text&gt;
                &lt;/TouchableHighlight&gt;

                &lt;TouchableHighlight onPress={<span style="color: rgba(0, 0, 255, 1)">this</span>._takePicture.bind(<span style="color: rgba(0, 0, 255, 1)">this</span>)}&gt;
                  &lt;Text style={styles.picture}&gt;Take Picture&lt;/Text&gt;
                &lt;/TouchableHighlight&gt;
            &lt;/RNCamera&gt;<span style="color: rgba(0, 0, 0, 1)">
      );
    }
}

</span><span style="color: rgba(0, 0, 255, 1)">const</span> styles =<span style="color: rgba(0, 0, 0, 1)"> StyleSheet.create({
    container: {
      flex: </span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">,
      justifyContent: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">center</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      alignItems: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">center</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      backgroundColor: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">transparent</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    },
    </span><span style="color: rgba(0, 0, 255, 1)">switch</span><span style="color: rgba(0, 0, 0, 1)">: {
      marginTop: </span><span style="color: rgba(128, 0, 128, 1)">30</span><span style="color: rgba(0, 0, 0, 1)">,
      textAlign: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">center</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      fontSize: </span><span style="color: rgba(128, 0, 128, 1)">30</span><span style="color: rgba(0, 0, 0, 1)">,
      color: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">red</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    },
    picture: {
      marginTop: </span><span style="color: rgba(128, 0, 128, 1)">30</span><span style="color: rgba(0, 0, 0, 1)">,
      textAlign: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">center</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
      fontSize: </span><span style="color: rgba(128, 0, 128, 1)">30</span><span style="color: rgba(0, 0, 0, 1)">,
      color: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">red</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
    }
});

AppRegistry.registerComponent(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">ReactNativeDemo</span><span style="color: rgba(128, 0, 0, 1)">'</span>, () =&gt; ReactNativeDemo);</pre>
</div>
<p><span style="font-size: 14px; font-family: 楷体">模拟器运行出现,无法启动相机如下</span></p>
<p><span style="font-size: 14px; font-family: 楷体">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<img alt="" width="218" height="394" data-src="https://img2018.cnblogs.com/common/791499/202001/791499-20200110182857555-631671793.png"></span></p>
<p><span style="font-size: 14px; font-family: 楷体">真机运行出现,对相机和麦克风进行授权后,示例如下</span></p>
<p><span style="font-size: 14px; font-family: 楷体"><img src="https://img2018.cnblogs.com/common/791499/202001/791499-20200111110658983-1964409166.gif">&nbsp;</span></p>
<p><span style="font-size: 14px; font-family: 楷体">拍照时的打印日至如下:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 128, 1)">2020</span>-<span style="color: rgba(128, 0, 128, 1)">01</span>-<span style="color: rgba(128, 0, 128, 1)">11</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">52</span>:<span style="color: rgba(128, 0, 128, 1)">23.940</span> response.uri:file:<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)">var/mobile/Containers/Data/Application/F36A8D1A-2F96-4E24-B2D8-9755AD1FF488/Library/Caches/Camera/F4B30B4E-69C5-4D61-B2AE-99426AED52F2.jpg</span></pre>
</div>

</div>
<div id="MySignature" role="contentinfo">
    程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!<br><br>
来源:https://www.cnblogs.com/XYQ-208910/p/12176757.html
頁: [1]
查看完整版本: ReactNative: 了解相机第三方库react-native-camera的使用