我目前正在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';
编辑:我已经解决了保存到相机卷的问题。振动的问题仍然存在。
由于
答案 0 :(得分:3)
对于您描述的第一个问题,虽然您通过将其保存到相机滚动来解决方法,但我建议您发布已编辑的代码以使问题保持最新。
文件系统问题
解决FileSystem错误问题,原始代码应该按原样运行,但您可以检查:
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
});
}
};