-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
QR Code scanner cordova plugin not working on android with capacitor #1213
Comments
I tried this plugin on my capacitor app but it seems that the scanner is behind the app. You had to develop a transparent view to see the scanner preview as you can see in the doc : https://github.com/bitpay/cordova-plugin-qrscanner#show
So, I installed this plugin https://github.com/phonegap/phonegap-plugin-barcodescanner. window.cordova.plugins.barcodeScanner.scan(
result => console.log(result),
err => console.error(err),
{
showTorchButton: true,
prompt: "Scan your code",
formats: "QR_CODE",
resultDisplayDuration: 0
}
); |
@piitaya Thanks so much for that, would never have realised that the barcode scanner had QR capability (thanks for the code sample, big help). I've tried that out and it's working on IOS and Android, so just need to figure out a fallback that works in a PWA and I'm away. Just a note if anyone else stumbles across this, you'll need to remove the QR plugin for the barcode plugin to work. |
closing with the tag known incompatible plugins I've tried with Cordova and on Android it's not showing the camera neither. Where it's not compatible is on iOS as it try to add the camera view on the parent of the webview, but Capacitor's webview doesn't have a parent, it's on top already, so it would require some code changes on the plugin. |
@jcesarmobile If this plug in is no longer compatible or working, can it be de-listed from the docs? (https://ionicframework.com/docs/native/qr-scanner#platforms). Would save people the time of going down a dead end (and raising bugs like this one). And perhaps re-name the barcode scanner plug-in to barcode/qr scanner in the docs also. |
Well, with Cordova it probably works. On Android despite it didn’t show the preview it was working, so maybe I did something wrong and missed some step to make the preview work. |
To add on to @piitaya's answer, these are the exact steps you need to take to get the Phonegap Barcode scanner working:
import { Component, OnInit } from '@angular/core';
declare let window: any; // Don't forget this part!
@Component({
selector: 'app-qr',
templateUrl: './qr.component.html',
styleUrls: ['./qr.component.scss'],
})
export class QrComponent implements OnInit {
ngOnInit() {
window.cordova.plugins.barcodeScanner.scan(
result => console.log(result),
err => console.error(err),
{
showTorchButton: true,
prompt: "Scan your code",
formats: "QR_CODE",
resultDisplayDuration: 0
}
);
}
}
|
If you set the background as transparent, the camera will be shown. E.g.: import { Component, OnInit } from '@angular/core';
import { QRScanner, QRScannerStatus } from '@ionic-native/qr-scanner/ngx';
@Component({
selector: 'app-checkin',
templateUrl: './checkin.page.html',
styleUrls: ['./checkin.page.scss'],
})
export class CheckinPage implements OnInit {
domElement: any;
constructor(
private qrScanner: QRScanner
) {}
ngOnInit() {
this.domElement = window.document.querySelector('ion-app') as HTMLElement;
this.prepare();
}
ionViewWillLeave() {
this.hideCamera();
}
prepare() {
this.qrScanner.prepare()
.then((status: QRScannerStatus) => {
console.log(status.authorized);
})
.catch((err) => {
console.log(err);
});
}
// Run this function.
showCamera() {
this.qrScanner.show();
this.domElement.classList.add('has-camera');
const scanSub = this.qrScanner.scan()
.subscribe((text: string) => {
scanSub.unsubscribe();
this.onScan(text);
});
}
hideCamera() {
this.qrScanner.hide();
this.domElement.classList.remove('has-camera');
}
onScan(text: string) {
this.hideCamera();
console.log('Scanned:', text);
}
} Add this to src/global.css ion-app.has-camera,
ion-app.has-camera ion-content {
--background: transparent;
background: transparent !important;
} It's working fine so far. |
@felipemarcos thanks for the code, i tried but it look parent component are not updated, do you know how to do it in angular 11 ? |
Thanks for the issue! This issue is being locked to prevent comments that are not relevant to the original issue. If this is still an issue with the latest version of Capacitor, please create a new issue and ensure the template is fully filled out. |
I've followed the steps to add the QR code cordova plugin to my Ionic4/Angular/Capacitor app, but can't get it to work (in a web/pwa context, or on device on android).
After adding the cordova plugin and associated angular package/import and running 'npx capacitor sync', I can see the plugin in the list:
And my code is a copy and paste from the docs, I'm importing the QR scanner:
import { QRScanner, QRScannerStatus } from '@ionic-native/qr-scanner/ngx';
Injecting it into my angular component:
constructor(private qrScanner: QRScanner)
And I've got got a button that calls this function:
` qrScan() {
// Optionally request the permission early
this.qrScanner.prepare()
.then((status: QRScannerStatus) => {
if (status.authorized) {
// camera permission was granted
}`
But after an ionic build and an npx sync, this doesn't work. Clicking the button does nothing.
In a browser with 'npx cap serve' the error is that it can't find Cordova. Do cordova plugins that support 'browser' work in a capacitor context?
With 'npx cap open android' in android studio running debug on the phone, the button also does nothing, but I'm too much of a n00b to know where error output would appear, but happy to follow instructions to give more detail.
The text was updated successfully, but these errors were encountered: