QR/Barcode Scanning
What is a Code Scanner?​
A Code Scanner is a separate Camera output (just like photo or video) that can detect a variety of machine-readable codes, such as:
- QR: Square QR codes
- Aztec: Square Aztec codes
- Data Matrix: Square Data Matrix codes
- Barcode (EAN): EAN-13 or EAN-8 Barcodes
- Barcode (Code): Code-128, Code-39 or Code-93 Barcodes
- Barcode (other): Codabar, ITF-14, UPC-E or PDF-417 Barcodes
Setup​
On iOS, the Code Scanner uses the platform-native APIs and can be used out of the box.
On Android, the MLKit Vision Barcode Scanning API will be used, and the model (2.2MB) needs to be downloaded first.
- React Native
- Expo
To download the model when the user installs your app, add this to your AndroidManifest.xml
file:
<application ...>
...
<meta-data
android:name="com.google.mlkit.vision.DEPENDENCIES"
android:value="barcode" />
</application>
To download the model when the user installs your app, add the enableCodeScanner
flag to your Expo config (app.json
, app.config.json
or app.config.js
):
{
"name": "my app",
"plugins": [
[
"react-native-vision-camera",
{
// ...
"enableCodeScanner": true
}
]
]
}
Usage​
To use a codescanner, simply create a CodeScanner
and pass it to the <Camera>
:
- Hooks API
- Imperative API
const codeScanner = useCodeScanner({
codeTypes: ['qr', 'ean-13'],
onCodeScanned: (codes) => {
console.log(`Scanned ${codes.length} codes!`)
}
})
return <Camera {...props} codeScanner={codeScanner} />
The result of this will automatically be memoized.
const codeScanner: CodeScanner = {
codeTypes: ['qr', 'ean-13'],
onCodeScanned: (codes) => {
console.log(`Scanned ${codes.length} codes!`)
}
}
Make sure to memoize the result of this, as every change in this will trigger a Camera session re-build.
render() {
return <Camera {...props} codeScanner={this.codeScanner} />
}
Separate Output​
Since the Code Scanner is a separate camera output (just like photo or video), it cannot be attached simultaneously with photo and video enabled.
You need to disable either photo
, video
, or the codeScanner
.
Code result​
The Code Scanner will call your onCodeScanned
callback with all detected codes (Code
), including their decoded string value, and their coordinates on the screen relative to the Preview.