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> </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> </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<RNCameraProps & ViewProperties><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><<span style="color: rgba(0, 0, 255, 1)">typeof</span> findNodeHandle><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<TakePictureResponse><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<RecordResponse><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<<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>
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<<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, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">是否支持异步比率</span>
getSupportedRatiosAsync(): Promise<<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)">* 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<boolean><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; } } }) => <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 <= 1 will use the camera's max zoom, while a value > 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<keyof BarCodeType><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<Point<string>> }`
* @description For iOS use `{ origin: Point<string>, size: Size<string> }`
</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><Point<<span style="color: rgba(0, 0, 255, 1)">string</span>>> } | { origin: Point<<span style="color: rgba(0, 0, 255, 1)">string</span>>; size: Size<<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)">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 <</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)">>
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> Trent Jones <</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)">>
</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<<span style="color: rgba(0, 0, 0, 1)">{
auto: any;
landscapeLeft: any;
landscapeRight: any;
portrait: any;
portraitUpsideDown: any;
}</span>><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<{ on: any; off: any }><span style="color: rgba(0, 0, 0, 1)">;
type FlashMode </span>= Readonly<{ on: any; off: any; torch: any; auto: any }><span style="color: rgba(0, 0, 0, 1)">;
type CameraType </span>= Readonly<{ front: any; back: any }><span style="color: rgba(0, 0, 0, 1)">;
type WhiteBalance </span>= Readonly<<span style="color: rgba(0, 0, 0, 1)">{
sunny: any;
cloudy: any;
shadow: any;
incandescent: any;
fluorescent: any;
auto: any;
}</span>><span style="color: rgba(0, 0, 0, 1)">;
type BarCodeType </span>= Readonly<<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>><span style="color: rgba(0, 0, 0, 1)">;
type VideoQuality </span>= Readonly<<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>><span style="color: rgba(0, 0, 0, 1)">;
type VideoCodec </span>= Readonly<<span style="color: rgba(0, 0, 0, 1)">{
H264: symbol;
JPEG: symbol;
HVEC: symbol;
AppleProRes422: symbol;
AppleProRes4444: symbol;
}</span>><span style="color: rgba(0, 0, 0, 1)">;
type FaceDetectionClassifications </span>= Readonly<{ all: any; none: any }><span style="color: rgba(0, 0, 0, 1)">;
type FaceDetectionLandmarks </span>= Readonly<{ all: any; none: any }><span style="color: rgba(0, 0, 0, 1)">;
type FaceDetectionMode </span>= Readonly<{ fast: any; accurate: any }><span style="color: rgba(0, 0, 0, 1)">;
type GoogleVisionBarcodeType </span>= Readonly<<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>><span style="color: rgba(0, 0, 0, 1)">;
type GoogleVisionBarcodeMode </span>= Readonly<{ NORMAL: any; ALTERNATE: any; INVERTED: any }><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<T> = { : P };
type CameraStatus </span>= Readonly<Self<{ READY: any; PENDING_AUTHORIZATION: any; NOT_AUTHORIZED: any }>><span style="color: rgba(0, 0, 0, 1)">;
type RecordAudioPermissionStatus </span>= Readonly<<span style="color: rgba(0, 0, 0, 1)">
Self</span><<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>>
><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>=><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; } } }) => <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 <= 1 will use the camera's max zoom, while a value > 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<keyof BarCodeType><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<Point<string>> }`
* @description For iOS use `{ origin: Point<string>, size: Size<string> }`
</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><Point<<span style="color: rgba(0, 0, 255, 1)">string</span>>> } | { origin: Point<<span style="color: rgba(0, 0, 255, 1)">string</span>>; size: Size<<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)">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<T = number><span style="color: rgba(0, 0, 0, 1)"> {
x: T;
y: T;
}
</span><span style="color: rgba(0, 0, 255, 1)">interface</span> Size<T = number><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<RNCameraProps & ViewProperties><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><<span style="color: rgba(0, 0, 255, 1)">typeof</span> findNodeHandle><span style="color: rgba(0, 0, 0, 1)">;
takePictureAsync(options</span>?: TakePictureOptions): Promise<TakePictureResponse><span style="color: rgba(0, 0, 0, 1)">;
recordAsync(options</span>?: RecordOptions): Promise<RecordResponse><span style="color: rgba(0, 0, 0, 1)">;
refreshAuthorizationStatus(): Promise</span><<span style="color: rgba(0, 0, 255, 1)">void</span>><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><<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)">
getSupportedRatiosAsync(): Promise</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)">* iOS only </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
isRecording(): Promise</span><boolean><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<Face[]><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<any><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> </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<string>, size: Size<string> }`
</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<Point<string>> }`</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) =><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 =><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><<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>>
<TouchableHighlight onPress={<span style="color: rgba(0, 0, 255, 1)">this</span>._switchCamera.bind(<span style="color: rgba(0, 0, 255, 1)">this</span>)}>
<Text style={styles.<span style="color: rgba(0, 0, 255, 1)">switch</span>}>Switch Camera</Text>
</TouchableHighlight>
<TouchableHighlight onPress={<span style="color: rgba(0, 0, 255, 1)">this</span>._takePicture.bind(<span style="color: rgba(0, 0, 255, 1)">this</span>)}>
<Text style={styles.picture}>Take Picture</Text>
</TouchableHighlight>
</RNCamera><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>, () => ReactNativeDemo);</pre>
</div>
<p><span style="font-size: 14px; font-family: 楷体">模拟器运行出现,无法启动相机如下</span></p>
<p><span style="font-size: 14px; font-family: 楷体"> <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"> </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]