Я перепробовал много попыток, чтобы заставить устройство работать с собственным изображением и работать с моим приложением RN. Я использую Expo и VS Code и не запускаю приложение с Xcode или Android Studio. Кажется, есть много вариантов, чтобы получить доступ к рулону камеры в приложении, и я не уверен, что это лучший путь. Кажется, ни один из них не работает для меня, поэтому я хотел бы выбрать лучший путь и сосредоточиться на том, чтобы этот маршрут работал.
Я слежу за документацией: https://github.com/react-native-community/react-native-image-picker
Вещи, которые я пробовал:
- Реагировать на нативную камеру Roll
- Expo ImagePicker
- expo-image-picker
- реагировать-родной-сборщик изображений
- реагировать-изображения-загружать
- реагировать-родной-фото-загрузка
Мой код:
import React, {useState, useEffect} from 'react';
import {StyleSheet, View, TextInput, TouchableOpacity, Text, CameraRoll } from 'react-native'
import ImagePicker from 'react-native-image-picker';
// import * as ImagePicker from 'expo-image-picker';
import Constants from 'expo-constants';
const PicturesScreen = ({navigation}) => {
const [pictures, setPictures] = useState([]);
getPermissionAsync = async () => {
if (Constants.platform.ios) {
const { status } = await Permissions.askAsync(Permissions.CAMERA_ROLL);
if (status !== 'granted') {
alert('Sorry, we need camera roll permissions to make this work!');
}
}
};
useEffect(() => {
getPermissionAsync();
}, []);
selectPhotoTapped = () => {
const options = {
quality: 1.0,
maxWidth: 500,
maxHeight: 500,
storageOptions: {
skipBackup: true,
},
};
ImagePicker.showImagePicker(options, response => {
if (response.didCancel) {
console.log('User cancelled photo picker');
} else if (response.error) {
console.log('ImagePicker Error: ', response.error);
} else if (response.customButton) {
console.log('User tapped custom button: ', response.customButton);
} else {
let source = {uri: response.uri};
console.log('source: ' + source);
// You can also display the image using data:
// let source = { uri: 'data:image/jpeg;base64,' + response.data };
setPictures({
picture: source
});
}
});
};
return (
<View style = {styles.container}>
<TouchableOpacity style = {styles.buttonContainerPhoto} onPress={()=> selectPhotoTapped()}>
<Text style={styles.buttonText} >
Upload Photos
</Text>
</TouchableOpacity>
<TouchableOpacity style = {styles.buttonContainer} onPress={()=> navigation.navigate('NextScreen')}>
<Text style={styles.buttonText} >
Next
</Text>
</TouchableOpacity>
</View>
);
};
const styles = StyleSheet.create({
container: {
...
}
});
export default PicturesScreen;
Я удостоверился, что связал пакеты, я также удалил и переустановил и начал с нуля несколько раз. Я понизил версию, чтобы она работала, но я все еще продолжаю получать одно из следующих сообщений об ошибках:
response-native-image-picker: NativeModule.ImagePickerManager равен null
или
Невозможно прочитать свойство 'showImagePicker' из undefined.
или
undefined не является объектом (оценивает 'imagepickerManager.showimagepicker ')
Это вызывает проблемы, потому что я пользуюсь Expo? Должен ли я просто использовать CameraRoll с Reaction-native?