react native camera(android):takePictureAsync()抛出错误
从react native camera调用takePictureAsync()后,出现以下错误:react native camera(android):takePictureAsync()抛出错误,android,react-native,react-native-android,react-native-camera,Android,React Native,React Native Android,React Native Camera,从react native camera调用takePictureAsync()后,出现以下错误: { "framesToPop": 1, "nativeStackAndroid": [], "userInfo": null, "message": "Preview is paused - resume it before taking a picture.", "code": "E_TAKE_PICTURE_FAILED", "line": 2131, "colum
{
"framesToPop": 1,
"nativeStackAndroid": [],
"userInfo": null,
"message": "Preview is paused - resume it before taking a picture.",
"code": "E_TAKE_PICTURE_FAILED",
"line": 2131,
"column": 45,
"sourceURL": "http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false"
}
因此,在调用takePictureAsync()之前,我尝试使用resumePreview()方法,现在我收到一条不同的错误消息:
{
"framesToPop": 1,
"nativeStackAndroid": [],
"userInfo": null,
"message": "takePicture failed",
"code": "E_TAKE_PICTURE_FAILED",
"line": 2131,
"column": 45,
"sourceURL": "http://10.0.2.2:8081/index.bundle?platform=android&dev=true&minify=false"
}
我的组件和用法与
在iOS上运行良好。
这是库的问题还是我的实现的问题 尝试使用组件作为FaCC(功能作为子组件)!这种方法对我有效
const PendingView = () => (
<View
style={{
flex: 1,
backgroundColor: 'lightgreen',
justifyContent: 'center',
alignItems: 'center',
}}
>
<Text>Waiting</Text>
</View>
);
class ExampleApp extends PureComponent {
render() {
return (
<View style={styles.container}>
<RNCamera
style={styles.preview}
type={RNCamera.Constants.Type.back}
>
{({ camera, status, recordAudioPermissionStatus }) => {
if (status !== 'READY') return <PendingView />;
return (
<View style={{ flex: 0, flexDirection: 'row', justifyContent: 'center' }}>
<TouchableOpacity onPress={() => this.takePicture(camera)} style={styles.capture}>
<Text style={{ fontSize: 14 }}> SNAP </Text>
</TouchableOpacity>
</View>
);
}}
</RNCamera>
</View>
);
}
takePicture = async function(camera) {
const options = { quality: 0.5, base64: true };
const data = await camera.takePictureAsync(options);
// eslint-disable-next-line
console.log(data.uri);
};
}
const styles = StyleSheet.create({
container: {
flex: 1,
flexDirection: 'column',
backgroundColor: 'black',
},
preview: {
flex: 1,
justifyContent: 'flex-end',
alignItems: 'center',
},
capture: {
flex: 0,
backgroundColor: '#fff',
borderRadius: 5,
padding: 15,
paddingHorizontal: 20,
alignSelf: 'center',
margin: 20,
},
});
const PendingView=()=>(
等待
);
类ExampleApp扩展了PureComponent{
render(){
返回(
{({摄像头,状态,recordAudioPermissionStatus})=>{
如果(状态!=“准备就绪”)返回;
返回(
this.takePicture(camera)}style={styles.capture}>
断裂
);
}}
);
}
takePicture=异步功能(摄像头){
const options={quality:0.5,base64:true};
const data=wait camera.takePictureAsync(选项);
//eslint禁用下一行
log(data.uri);
};
}
const styles=StyleSheet.create({
容器:{
弹性:1,
flexDirection:'列',
背景颜色:“黑色”,
},
预览:{
弹性:1,
justifyContent:“柔性端”,
对齐项目:“居中”,
},
捕获:{
弹性:0,
背景颜色:“#fff”,
边界半径:5,
填充:15,
水平方向:20,
对齐自我:“中心”,
差额:20,
},
});
"react-native": "0.61.2",
"react-native-camera": "git+https://git@github.com/react-native-community/react-native-camera.git",
const PendingView = () => (
<View
style={{
flex: 1,
backgroundColor: 'lightgreen',
justifyContent: 'center',
alignItems: 'center',
}}
>
<Text>Waiting</Text>
</View>
);
class ExampleApp extends PureComponent {
render() {
return (
<View style={styles.container}>
<RNCamera
style={styles.preview}
type={RNCamera.Constants.Type.back}
>
{({ camera, status, recordAudioPermissionStatus }) => {
if (status !== 'READY') return <PendingView />;
return (
<View style={{ flex: 0, flexDirection: 'row', justifyContent: 'center' }}>
<TouchableOpacity onPress={() => this.takePicture(camera)} style={styles.capture}>
<Text style={{ fontSize: 14 }}> SNAP </Text>
</TouchableOpacity>
</View>
);
}}
</RNCamera>
</View>
);
}
takePicture = async function(camera) {
const options = { quality: 0.5, base64: true };
const data = await camera.takePictureAsync(options);
// eslint-disable-next-line
console.log(data.uri);
};
}
const styles = StyleSheet.create({
container: {
flex: 1,
flexDirection: 'column',
backgroundColor: 'black',
},
preview: {
flex: 1,
justifyContent: 'flex-end',
alignItems: 'center',
},
capture: {
flex: 0,
backgroundColor: '#fff',
borderRadius: 5,
padding: 15,
paddingHorizontal: 20,
alignSelf: 'center',
margin: 20,
},
});