Экспо уже есть то, что вы хотите.expo-barcode-scanner
Если ваша версия Экспо 33, вы должны загрузить ее отдельно.
Вы можете запустить expo install expo-barcode-scanner
Вы должны запросить permission
для доступа к камере пользователя, прежде чем пытаться получить ее.Для этого вам нужно будет использовать Permissions
API.Это можно увидеть на практике в следующем примере.
Базовый пример
import * as React from 'react';
import { Text, View, StyleSheet, Button } from 'react-native';
import Constants from 'expo-constants';
import * as Permissions from 'expo-permissions';
import { BarCodeScanner } from 'expo-barcode-scanner';
export default class BarcodeScannerExample extends React.Component {
state = {
hasCameraPermission: null,
scanned: false,
};
async componentDidMount() {
this.getPermissionsAsync();
}
getPermissionsAsync = async () => {
const { status } = await Permissions.askAsync(Permissions.CAMERA);
this.setState({ hasCameraPermission: status === 'granted' });
};
render() {
const { hasCameraPermission, scanned } = this.state;
if (hasCameraPermission === null) {
return <Text>Requesting for camera permission</Text>;
}
if (hasCameraPermission === false) {
return <Text>No access to camera</Text>;
}
return (
<View
style={{
flex: 1,
flexDirection: 'column',
justifyContent: 'flex-end',
}}>
<BarCodeScanner
onBarCodeScanned={scanned ? undefined : this.handleBarCodeScanned}
style={StyleSheet.absoluteFillObject}
/>
{scanned && (
<Button title={'Tap to Scan Again'} onPress={() => this.setState({ scanned: false })} />
)}
</View>
);
}
handleBarCodeScanned = ({ type, data }) => {
this.setState({ scanned: true });
alert(`Bar code with type ${type} and data ${data} has been scanned!`);
};
}
реквизит
- onBarCodeScanned (функция)
Обратный вызов, который вызывается после успешного сканирования штрих-кода.Обратный вызов предоставляется с объектом формы { type: BarCodeScanner.Constants.BarCodeType, data: string }
, где тип относится к типу штрих-кода, который был отсканирован, а данные - это информация, закодированная в штрих-коде (в этом случае QR-кодов, это часто URL-адрес).Информацию о поддерживаемых значениях см. В BarCodeScanner.Constants.BarCodeType
.
Массив типов штрих-кодов.Использование: BarCodeScanner.Constants.BarCodeType.<codeType>
, где codeType
является одним из перечисленных выше.По умолчанию: все поддерживаемые типы штрих-кодов.Например:
barCodeTypes={[BarCodeScanner.Constants.BarCodeType.qr]}
Примечание: Передача undefined
в onBarCodeScanned
пропеллер не приведет к сканированию.Это можно использовать для эффективной «приостановки» сканера, чтобы он не сканировал постоянно даже после получения данных.