我正在使用此处的基本代码使相机正常工作。唯一的区别是我没有制作独立的相机应用程序,而是将代码实现到其他应用程序(从应用程序内的按钮打开相机)
我正好遵循代码,但相机不会拍摄图片并保存图片。甚至有警告说
[Unhandled Promise rejection: Error: TypeError: expected dynamic type `string', but had type `object']
我重新检查代码,我很确定它来自此部分
takePicture = async function() {
if (this.camera) {
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();
});
});
}
};
快照按钮没有拍照。
我进行了控制台日志,并为takePictureAsync()
if (this.camera) {
this.camera.takePictureAsync().then(data => console.log(data));
}
这是结果
Object {
"height": 1920,
"uri":"file:///data/user/0/host.exp.exponent/cache/ExperienceData/%2540lily%252Fmotion/Camera/e501458d-f081-47b5-b7ac-6742f8e8d61e.jpg",
"width": 1080,
}
这是为什么它在警告expected dynamic type 'string', but had type 'object']
中说的原因?以及该应用不拍照的可能原因?
如果是,我应该如何解决此问题?
谢谢您的帮助。
我的package.json
"expo": "^22.0.4",
"native-base": "^2.3.3",
"react": "16.0.0-beta.5",
"react-native": "https://github.com/expo/react-native/archive/sdk-22.0.1.tar.gz"
看起来您确实拍了照片!现在您只需要将其保存在某个地方...
FileSystem.moveAsync({
from: data,
to: `${FileSystem.documentDirectory}photos/Photo_${this.state.photoId}.jpg`,
}).then(() => {
this.setState({
photoId: this.state.photoId + 1,
});
Vibration.vibrate();
});
您提供的代码使用文件系统在应用程序中保存您的照片。您的照片将保存到这样的东西:{documentsDirectory}/photos/Photo_{0}.jpg
如果您想将图像保存到相机卷中,则应使用React Native Cameraroll API。
您将使用静态方法await CameraRoll.saveToCameraRoll(photoUri)