Search code examples
androidfirebasebarcode-scanner

google play services depends on exact version 22.0.0


i tried to add the dependency for qr code scanner

upon implementing this dependency i'm getting

implementation 'com.google.firebase:firebase-ml-vision-barcode-model:16.0.1'
FAILURE: Build failed with an exception.

* What went wrong:
In project 'app' a resolved Google Play services library dependency depends on another at an exact version (e.g. "[22.0.
0]", but isn't being resolved to that version. Behavior exhibited by the library will be unknown.

Dependency failing: com.google.firebase:firebase-ml-vision-barcode-model:16.0.1 -> com.google.firebase:firebase-ml-commo
n@[22.0.0], but firebase-ml-common version was 22.0.1.

The following dependencies are project dependencies that are direct or have transitive dependencies that lead to the art
ifact with the issue.
-- Project 'app' depends onto com.google.firebase:firebase-ml-vision@{strictly 24.0.1}
-- Project 'app' depends onto com.google.firebase:firebase-ml-common@{strictly 22.0.1}
-- Project 'app' depends onto com.google.firebase:firebase-ml-vision-barcode-model@{strictly 16.0.1}
-- Project 'app' depends onto com.google.firebase:firebase-ml-vision-barcode-model@16.0.1
-- Project 'app' depends onto com.google.firebase:firebase-ml-vision@24.0.1

For extended debugging info execute Gradle from the command line with ./gradlew --info :app:assembleDebug to see the dep
endency paths to the artifact. This error message came from the google-services Gradle plugin, report issues at https://
github.com/google/play-services-plugins and disable by adding "googleServices { disableVersionCheck = false }" to your b
uild.gradle file.

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
com.intellij.openapi.externalSystem.model.ExternalSystemException: In project 'app' a resolved Google Play services library dependency depends on another at an exact version (e.g. "[22.0.
0]", but isn't being resolved to that version. Behavior exhibited by the library will be unknown.

Dependency failing: com.google.firebase:firebase-ml-vision-barcode-model:16.0.1 -> com.google.firebase:firebase-ml-commo
n@[22.0.0], but firebase-ml-common version was 22.0.1.

Also,

gradle and google services version

classpath 'com.android.tools.build:gradle:3.6.0'
classpath 'com.google.gms:google-services:4.3.3'

and gradle wrapper properties

distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip

Solution

  • remove this plugin

    implementation 'com.google.firebase:firebase-ml-vision-barcode-model:16.0.1'
    

    and refer this link add qr code scanner

    https://www.javatpoint.com/android-qr-code-or-bar-code-scanner
    

    to ease

    package com.tvastr.mvvmarchitecture;
    
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.core.app.ActivityCompat;
    
    import android.Manifest;
    import android.content.Intent;
    import android.content.pm.PackageManager;
    import android.net.Uri;
    import android.os.Bundle;
    import android.util.Log;
    import android.util.SparseArray;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.google.android.gms.vision.CameraSource;
    import com.google.android.gms.vision.Detector;
    import com.google.android.gms.vision.barcode.Barcode;
    import com.google.android.gms.vision.barcode.BarcodeDetector;
    import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcode;
    import com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetectorOptions;
    
    import java.io.IOException;
    
    public class ScannedBarcodeActivity extends AppCompatActivity {
    
        SurfaceView surfaceView;
        TextView txtBarcodeValue;
        private BarcodeDetector barcodeDetector;
        private CameraSource cameraSource;
        private static final int REQUEST_CAMERA_PERMISSION = 201;
        Button btnAction;
        String intentData = "";
        boolean isEmail = false;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_scanned_barcode);
            initViews();
        }
    
        private void initViews() {
            txtBarcodeValue = findViewById(R.id.txtBarcodeValue);
            surfaceView = findViewById(R.id.surfaceView);
            btnAction = findViewById(R.id.btnAction);
            btnAction.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (intentData.length() > 0) {
                        Log.d("log", "intentData email : " + intentData);
                    }
                }
            });
        }
    
    
        private void initialiseDetectorsAndSources() {
    
            Toast.makeText(getApplicationContext(), "Barcode scanner started", Toast.LENGTH_SHORT).show();
            barcodeDetector = new BarcodeDetector.Builder(this)
                    .setBarcodeFormats(Barcode.QR_CODE)
                    .build();
    
            cameraSource = new CameraSource.Builder(this, barcodeDetector)
                    .setRequestedPreviewSize(1920, 1080)
                    .setAutoFocusEnabled(true) //you should add this feature
                    .build();
    
            surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
                @Override
                public void surfaceCreated(SurfaceHolder holder) {
                    if (ActivityCompat.checkSelfPermission(ScannedBarcodeActivity.this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
                        try {
                            cameraSource.start(surfaceView.getHolder());
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    } else {
                        ActivityCompat.requestPermissions(ScannedBarcodeActivity.this, new
                                String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
                    }
    
                }
    
                @Override
                public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
                }
    
                @Override
                public void surfaceDestroyed(SurfaceHolder holder) {
                    cameraSource.stop();
                }
            });
    
            barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {
                @Override
                public void release() {
                    Toast.makeText(getApplicationContext(), "To prevent memory leaks barcode scanner has been stopped", Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void receiveDetections(Detector.Detections<Barcode> detections) {
                    final SparseArray<Barcode> barcodes = detections.getDetectedItems();
                    if (barcodes.size() != 0) {
                        txtBarcodeValue.post(new Runnable() {
                            @Override
                            public void run() {
    
                                if (barcodes.valueAt(0).email != null) {
                                    txtBarcodeValue.removeCallbacks(null);
                                    intentData = barcodes.valueAt(0).email.address;
                                    txtBarcodeValue.setText(intentData);
                                    isEmail = true;
                                    btnAction.setText("ADD CONTENT TO THE MAIL");
                                } else {
                                    isEmail = false;
                                    btnAction.setText("LAUNCH URL");
                                    intentData = barcodes.valueAt(0).displayValue;
                                    txtBarcodeValue.setText(intentData);
                                }
                            }
                        });
                    }
                }
            });
        }
    
    
        @Override
        protected void onPause() {
            super.onPause();
            cameraSource.release();
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            initialiseDetectorsAndSources();
        }
    }
    
    
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="20dp">
    
        <SurfaceView
            android:id="@+id/surfaceView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/btnAction"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true" />
    
        <TextView
            android:id="@+id/txtBarcodeValue"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginStart="10dp"
            android:layout_marginLeft="10dp"
            android:text="No Barcode Detected"
            android:textColor="@android:color/white"
            android:textSize="20sp" />
    
    
        <Button
            android:id="@+id/btnAction"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:text="ADD CONTENT IN THE MAIL" />
    </RelativeLayout>