javascript - React-native-camera 没有出现在屏幕上
问题描述
我正在开发一个使用 react-native-camera 读取 QR 码的应用程序,但屏幕上没有出现相机预览。
我正在react-native 0.57.7
使用react-native-camera 1.10.0
. 我已经运行了以下命令:
npm install react-native-camera --save
react-native link react-native-camera
这是我在代码中调用相机的地方:
import React, {Component} from 'react';
import {View, Image, TouchableOpacity, ScrollView} from 'react-native';
import RNCamera from 'react-native-camera';
class profPresencaScreen extends Component{
<View style={{flex: 1}}>
<RNCamera
ref={ref => {
this.camera = ref;
}}
defaultTouchToFocus
mirrorImage={false}
permissionDialogTitle={'Permission to use camera'}
permissionDialogMessage={'We need your permission to use your camera phone'}
/>
</View>
}
export default profPresencaScreen;
权限对话框打开,它甚至在我第一次打开应用程序时显示加载资产,但相机预览从未出现。有什么办法可以在我的应用程序上显示它?
编辑:我成功了!我手动设置了相机的样式:
<RNCamera
ref={ref => {
this.camera = ref;
}}
defaultTouchToFocus
mirrorImage={false}
permissionDialogTitle={'Permission to use camera'}
permissionDialogMessage={'We need your permission to use your camera phone'}
style={{flex: 1}}
/>
就那么简单!感谢所有试图提供帮助的人!
解决方案
您可以react-native-camera-kit
使用react-native-camera
.
请按照以下步骤操作。
1] npm install react-native-camera-kit --save
2] react-native link react-native-camera-kit
转到 YourReactNativeProject -> android -> app -> src -> main -> AndroidManifest.xml 并添加以下权限。
<uses-permission android:name="android.permission.CAMERA"/>
以下是相机/二维码扫描的相关代码。
import { StyleSheet, View, Text, Platform, TouchableOpacity, Linking, PermissionsAndroid } from 'react-native';
import { CameraKitCameraScreen, } from 'react-native-camera-kit';
export default class App extends Component {
constructor() {
super();
this.state = {
QR_Code_Value: '',
Start_Scanner: false,
};
}
openLink_in_browser = () => {
Linking.openURL(this.state.QR_Code_Value);
}
onQR_Code_Scan_Done = (QR_Code) => {
this.setState({ QR_Code_Value: QR_Code });
this.setState({ Start_Scanner: false });
}
open_QR_Code_Scanner=()=> {
var that = this;
if (Platform.OS === 'android') {
async function requestCameraPermission() {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.CAMERA, {
'title': 'Camera App Permission',
'message': 'Camera App needs access to your camera '
}
)
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
that.setState({ QR_Code_Value: '' });
that.setState({ Start_Scanner: true });
} else {
alert("CAMERA permission denied");
}
} catch (err) {
alert("Camera permission err", err);
console.warn(err);
}
}
requestCameraPermission();
} else {
that.setState({ QR_Code_Value: '' });
that.setState({ Start_Scanner: true });
}
}
render() {
if (!this.state.Start_Scanner) {
return (
<View style={styles.MainContainer}>
<Text style={{ fontSize: 22, textAlign: 'center' }}>React Native Scan QR Code Example</Text>
<Text style={styles.QR_text}>
{this.state.QR_Code_Value ? 'Scanned QR Code: ' + this.state.QR_Code_Value : ''}
</Text>
{this.state.QR_Code_Value.includes("http") ?
<TouchableOpacity
onPress={this.openLink_in_browser}
style={styles.button}>
<Text style={{ color: '#FFF', fontSize: 14 }}>Open Link in default Browser</Text>
</TouchableOpacity> : null
}
<TouchableOpacity
onPress={this.open_QR_Code_Scanner}
style={styles.button}>
<Text style={{ color: '#FFF', fontSize: 14 }}>
Open QR Scanner
</Text>
</TouchableOpacity>
</View>
);
}
return (
<View style={{ flex: 1 }}>
<CameraKitCameraScreen
showFrame={true}
scanBarcode={true}
laserColor={'#FF3D00'}
frameColor={'#00C853'}
colorForScannerFrame={'black'}
onReadCode={event =>
this.onQR_Code_Scan_Done(event.nativeEvent.codeStringValue)
}
/>
</View>
);
}
}
const styles = StyleSheet.create({
MainContainer: {
flex: 1,
paddingTop: (Platform.OS) === 'ios' ? 20 : 0,
alignItems: 'center',
justifyContent: 'center',
},
QR_text: {
color: '#000',
fontSize: 19,
padding: 8,
marginTop: 12
},
button: {
backgroundColor: '#2979FF',
alignItems: 'center',
padding: 12,
width: 300,
marginTop: 14
},
});
推荐阅读
- linux - 如何删除我的终端在启动时运行的这两个命令?
- javascript - 在节点打字稿环境中使用猫鼬填充
- wpf - WPF:使用 DrawingContext 的贝塞尔曲线
- python - 如何使用浏览器开发者工具从 POST 方法中获取数据
- java - Java Eclipse 错误:无法创建 Java 虚拟机
- html - 加载另一个组件而不是 root-app-component
- javascript - Print json object to nested html table
- java - 使用 hatos 将 _links ,_refs 添加到 Spring 应用程序
- node.js - 如何使用 NodeJs 中的 FS 将文件从一个文件夹复制到另一个文件夹?
- wordpress - 有没有办法集中访问 wordpress 进行共同开发?