question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

QR Code scanner cordova plugin not working on android with capacitor

See original GitHub issue

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:

√ Copying capacitor.config.json in 1.91ms Found 7 Cordova plugins for android CordovaPluginDevice (2.0.2) CordovaPluginFile (6.0.1) CordovaPluginFileTransfer (1.7.1) CordovaPluginIonic (5.2.10) CordovaPluginQrscanner (2.6.0) CordovaPluginWhitelist (1.3.3) CordovaSqliteStorage (2.6.0) √ copy in 1.48s

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

      // start scanning
      const scanSub = this.qrScanner.scan().subscribe((text: string) => {
        console.log('Scanned something', text);

        this.qrScanResult = text;

        this.qrScanner.hide(); // hide camera preview
        scanSub.unsubscribe(); // stop scanning
      });

    } else if (status.denied) {
      // camera permission was permanently denied
      // you must use QRScanner.openSettings() method to guide the user to the settings page
      // then they can grant the permission from there
      console.log('denied');
    } else {
      // permission was denied, but not permanently. You can ask for permission again at a later time.
    }
  })
  .catch((e: any) => console.log('Error is', e));

}`

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.

Issue Analytics

  • State:closed
  • Created 5 years ago
  • Comments:9 (5 by maintainers)

github_iconTop GitHub Comments

11reactions
FelipeMarcoscommented, Feb 13, 2020

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.

9reactions
dennisamelingcommented, Nov 28, 2019

To add on to @piitaya’s answer, these are the exact steps you need to take to get the Phonegap Barcode scanner working:

  • Run npm install phonegap-plugin-barcodescanner (you don’t need the phonegap CLI for this)
  • In your component, make sure you have declare let window: any; or you’ll get errors:
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
      }
    );
  }

}
  • This plugin does not work in the web version of your app. In our testing it only works on Android & iOS.
  • Run npx cap sync and Capacitor will take care of the rest. Example for Android:
Found 1 Cordova plugin for android
    phonegap-plugin-barcodescanner (8.1.0)
Read more comments on GitHub >

github_iconTop Results From Across the Web

Angular Ionic Capacitor Barcode Scanner Plugin not working ...
So i wanted to add the Cordova Barcode Scanner Plugin via Capacitor. At first i installed the plugin, like the guide describes: $...
Read more >
Ionic_vue + capacitor + native plugin = does not work
I'm experiencing a similar problem trying to get the Ionic Native Barcode Scanner to work inside my Ionic Vue project with Capacitor ....
Read more >
QR Code and Barcode Scanning with Ionic & Capacitor
Learn how to scan QR code and barcode in your Ionic Capacitor application. Test the functionality on your device with complete code support....
Read more >
Using Cordova Plugins and Ionic Native - Capacitor
Compatibility Issues​ ... Some Cordova plugins don't work with Capacitor or Capacitor provides a conflicting alternative. See here for details and a known ......
Read more >
QR & Bar Code Generate & Scan - Ionic 6 Angular | Part 1
In this video, we are going to implement " QR Code & Bar Code Generator ... Ionic 6 Angular | Part 1 -...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found