世博会相机拍照崩溃的应用程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了世博会相机拍照崩溃的应用程序相关的知识,希望对你有一定的参考价值。
我目前正在ios上的应用程序中使用expo相机。
当我尝试像这样保存图像时,应用程序崩溃了。
takePicture = async function() {
this.camera.takePictureAsync().then(data => {
FileSystem.moveAsync({
from: data,
to: `${FileSystem.documentDirectory}photos/Photo_${this.state
.photoId}.jpg`,
}).then(() => {
this.setState({
photoId: this.state.photoId + 1,
});
Vibration.vibrate();
}).catch((err) => {
console.log("Error : " + err);
});
}).catch(error => {
console.log(error);
});
Vibration.vibrate();
console.log("Taking pic");
}
另外,Vibration.vibrate()实际上不会使手机振动。我在执行前面收到错误:
componentDidMount() {
FileSystem.makeDirectoryAsync(
FileSystem.documentDirectory + 'photos'
).catch(e => {
console.log(e, 'Directory exists');
});
}
错误只是说
[Error: Directory 'file:///var/mobile/Containers/Data/Application/X/Documents/ExponentExperienceData/X/photos' could not be created.]
还有其他人遇到过同样的问题吗?如果有人能让我知道如何添加振动,这将是太棒了。我已将其添加到文件顶部:
import {
StyleSheet,
Text,
View,
TouchableOpacity,
Slider,
Image,
Picker,
Button,
ScrollView,
Vibration,
} from 'react-native';
编辑:我已经解决了保存到相机卷的问题。振动的问题仍然存在。
谢谢
答案
对于您描述的第一个问题,虽然您通过将其保存到相机中通过解决方法解决了这个问题,但我建议您发布已编辑的代码以使问题保持最新。
文件系统问题
解决FileSystem错误问题,原始代码应该按原样运行,但您可以检查:
- 如果expo应用程序具有适当的文件访问权限(应通过expo库自动执行,但尝试更新expo应用程序)。有关FileSystem的文档可以在这里找到:https://docs.expo.io/versions/latest/sdk/filesystem.html
- 您可能需要创建中间目录(即照片):
像这样:
async componentDidMount() {
try {
await FileSystem.makeDirectoryAsync(
`${FileSystem.documentDirectory}photos`,
{
intermediates: true, // creates intermediate directories
}
)
} catch (e) {
console.log(e)
}
}
振动问题
振动问题可能是由于本文所述的反应原生的错误引起的:https://github.com/facebook/react-native/issues/8955#issuecomment-353373616
作为一种解决方法,您可以在设置状态之前振动,即:
takePicture = async function() {
if (this.camera) {
const picture = await this.camera.takePictureAsync();
const pictureFile = await FileSystem.moveAsync(
{
from: picture.uri,
to: `${
FileSystem.documentDirectory
}photos/Photo_${this.state.photoId}.jpg`
}
).catch(err => console.error(err));
Vibration.vibrate();
console.log("Pic taken", this.state.photoId);
return this.setState({
photoId: this.state.photoId + 1
});
}
};
以上是关于世博会相机拍照崩溃的应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Android:使用相机意图时应用程序在 onActivityResult 上崩溃
当我在 Redmi 7A 上启动相机拍照时应用程序崩溃。也无法在 UncaughtException 处理程序中捕获崩溃