Expo BarCodeScanner在离开应用程序时会冻结(更好地说,是相机)



我把这个来自Expo的BarCodeScanner放在一个选项卡中:

return (
<View
style={{
flex: 1,
flexDirection: "column",
justifyContent: "flex-end",
}}
>
<BarCodeScanner
onBarCodeScanned={scanned ? undefined : handleBarCodeScanned}
barCodeTypes={[BarCodeScanner.Constants.BarCodeType.ean13]}
style={StyleSheet.absoluteFillObject}
/>
{scanned && (
<Button title={"Tap to Scan Again"} onPress={() => setScanned(false)} />
)}
</View>
);

当扫描时,我重定向到这样的页面:

const handleBarCodeScanned = ({ type, data }) => {
setScanned(true);
props.navigation.navigate("EanProduct", {
ean: data,
});
};

它运行良好。问题是,当我通过主页按钮离开应用程序并返回应用程序时,相机被冻结了。应用程序没有崩溃,我可以四处导航,但相机已冻结

有没有办法把相机唤醒?或者为什么会发生这种情况?我试着听导航的变化,用didFocus为选项卡重新加载屏幕

useEffect(() => {
const navFocusListener = props.navigation.addListener("didFocus", () => {
//console.log("reload");
});
return () => {
navFocusListener.remove();
};
}, [props.navigation]);

不幸的是,这不起作用。

我遇到了类似的问题:我有两个使用BarCodeScanner的独立组件。从A切换到B是可以的。但是,从B切换回A时,A中的摄影机视图会冻结。B不是。无论我来回切换多少,A总是被冻结,B似乎工作得很好。

显然,这个问题已经存在多年了。我还没有看到世博会团队中任何人对此做出任何更新或回应。

更新

我在下面的评论中发布了我创建的问题的链接,但为了方便访问,我也会在这里发布。

这似乎是iOS中的错误,而不是Expo中的错误。

这个Snack演示了解决方法(本质上,我们必须手动卸载BarCodeScanner/Camer组件(。我可以确认这对我的项目有效。

BarCodeScanner和Camera的Expo文档都已更新,指出必须手动卸载这些组件,才能使用其他组件。

最新更新