expo-BarCodeScanner 不打开相机
expo-BarCodeScanner not opening camera
我对 React Native 还很陌生。我正在构建一个需要扫描条形码的应用程序。我正在请求权限,这有效。获得许可后,我想打开相机。每当我单击按钮时,应用程序都不会打开相机。我现在很困。我该如何解决这个问题?
提前致谢,
里科
import { StatusBar } from "expo-status-bar";
import { StyleSheet, Text, View, Button, TextInput, Image } from "react-native";
import { useEffect, useState } from "react";
import { BarCodeScanner } from "expo-barcode-scanner";
//import Camera from "./screens/Camera.js";
export default function ScanScreen() {
const [hasPermission, setHasPermission] = useState(null);
const [scanned, setScanned] = useState(false);
const [text, setText] = useState("Not yet scanned");
useEffect(() => {
askPermissions();
}, []);
const askPermissions = () => {
(async () => {
console.log("Asking for permissions");
const { status } = await BarCodeScanner.requestPermissionsAsync();
setHasPermission(status == "granted");
openCamera();
})();
};
const handleBarCodeScanned = ({ type, data }) => {
setScanned(true);
alert(`Bar code with type ${type} and data ${data} has been scanned!`);
};
function openCamera() {
if (hasPermission === true) {
console.log("Camera opened, permission true");
return (
<View>
<BarCodeScanner
onBarCodeScanned={scanned ? undefined : handleBarCodeScanned}
style={{ height: 400, width: 400 }}
/>
</View>
);
}
}
return (
<View
style={{
flex: 1,
flexDirection: "row",
alignItems: "center",
justifyContent: "center",
}}
>
<View
style={{
padding: 100,
}}
>
<Image
source={{
uri: "https://i.ibb.co/tmvt00w/logo.png",
}}
style={{ height: 300, width: 300, borderRadius: 1000 }}
/>
<TextInput
placeholder="Enter barcode"
style={{
borderBottomColor: "black",
borderBottomWidth: 1,
padding: 10,
marginBottom: 10,
}}
/>
<Button title="Open camera" onPress={() => askPermissions()} />
<StatusBar style="auto" />
</View>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#fff",
alignItems: "center",
justifyContent: "center",
},
});
export default function ScanScreen() {
const [hasPermission, setHasPermission] = useState(null);
const [scanned, setScanned] = useState(false);
const [text, setText] = useState("Not yet scanned");
/*
useEffect(() => {
askPermissions();
}, [hasPermission]);
*/
const askPermissions = () => {
(async () => {
console.log("Asking for permissions");
const { status } = await BarCodeScanner.requestPermissionsAsync();
setHasPermission(status == "granted");
})();
};
const handleBarCodeScanned = ({ type, data }) => {
setScanned(true);
alert(`Bar code with type ${type} and data ${data} has been scanned!`);
};
if (hasPermission && hasPermission) {
console.log("Camera opened, permission true");
return (
<View>
<BarCodeScanner
onBarCodeScanned={scanned ? undefined : handleBarCodeScanned}
style={{ height: 400, width: 400 }}
/>
</View>
);
}
return (
<View
style={{
flex: 1,
flexDirection: "row",
alignItems: "center",
justifyContent: "center",
}}
>
<View
style={{
padding: 100,
}}
>
<Image
source={{
uri: "https://i.ibb.co/tmvt00w/logo.png",
}}
style={{ height: 300, width: 300, borderRadius: 1000 }}
/>
<TextInput
placeholder="Enter barcode"
style={{
borderBottomColor: "black",
borderBottomWidth: 1,
padding: 10,
marginBottom: 10,
}}
/>
<Button title="Open camera" onPress={askPermissions} />
<StatusBar style="auto" />
</View>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#fff",
alignItems: "center",
justifyContent: "center",
},
});
我对 React Native 还很陌生。我正在构建一个需要扫描条形码的应用程序。我正在请求权限,这有效。获得许可后,我想打开相机。每当我单击按钮时,应用程序都不会打开相机。我现在很困。我该如何解决这个问题?
提前致谢, 里科
import { StatusBar } from "expo-status-bar";
import { StyleSheet, Text, View, Button, TextInput, Image } from "react-native";
import { useEffect, useState } from "react";
import { BarCodeScanner } from "expo-barcode-scanner";
//import Camera from "./screens/Camera.js";
export default function ScanScreen() {
const [hasPermission, setHasPermission] = useState(null);
const [scanned, setScanned] = useState(false);
const [text, setText] = useState("Not yet scanned");
useEffect(() => {
askPermissions();
}, []);
const askPermissions = () => {
(async () => {
console.log("Asking for permissions");
const { status } = await BarCodeScanner.requestPermissionsAsync();
setHasPermission(status == "granted");
openCamera();
})();
};
const handleBarCodeScanned = ({ type, data }) => {
setScanned(true);
alert(`Bar code with type ${type} and data ${data} has been scanned!`);
};
function openCamera() {
if (hasPermission === true) {
console.log("Camera opened, permission true");
return (
<View>
<BarCodeScanner
onBarCodeScanned={scanned ? undefined : handleBarCodeScanned}
style={{ height: 400, width: 400 }}
/>
</View>
);
}
}
return (
<View
style={{
flex: 1,
flexDirection: "row",
alignItems: "center",
justifyContent: "center",
}}
>
<View
style={{
padding: 100,
}}
>
<Image
source={{
uri: "https://i.ibb.co/tmvt00w/logo.png",
}}
style={{ height: 300, width: 300, borderRadius: 1000 }}
/>
<TextInput
placeholder="Enter barcode"
style={{
borderBottomColor: "black",
borderBottomWidth: 1,
padding: 10,
marginBottom: 10,
}}
/>
<Button title="Open camera" onPress={() => askPermissions()} />
<StatusBar style="auto" />
</View>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#fff",
alignItems: "center",
justifyContent: "center",
},
});
export default function ScanScreen() {
const [hasPermission, setHasPermission] = useState(null);
const [scanned, setScanned] = useState(false);
const [text, setText] = useState("Not yet scanned");
/*
useEffect(() => {
askPermissions();
}, [hasPermission]);
*/
const askPermissions = () => {
(async () => {
console.log("Asking for permissions");
const { status } = await BarCodeScanner.requestPermissionsAsync();
setHasPermission(status == "granted");
})();
};
const handleBarCodeScanned = ({ type, data }) => {
setScanned(true);
alert(`Bar code with type ${type} and data ${data} has been scanned!`);
};
if (hasPermission && hasPermission) {
console.log("Camera opened, permission true");
return (
<View>
<BarCodeScanner
onBarCodeScanned={scanned ? undefined : handleBarCodeScanned}
style={{ height: 400, width: 400 }}
/>
</View>
);
}
return (
<View
style={{
flex: 1,
flexDirection: "row",
alignItems: "center",
justifyContent: "center",
}}
>
<View
style={{
padding: 100,
}}
>
<Image
source={{
uri: "https://i.ibb.co/tmvt00w/logo.png",
}}
style={{ height: 300, width: 300, borderRadius: 1000 }}
/>
<TextInput
placeholder="Enter barcode"
style={{
borderBottomColor: "black",
borderBottomWidth: 1,
padding: 10,
marginBottom: 10,
}}
/>
<Button title="Open camera" onPress={askPermissions} />
<StatusBar style="auto" />
</View>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#fff",
alignItems: "center",
justifyContent: "center",
},
});