투케이2K

140. (AndroidStudio/android/java) zxing 라이브러리 사용해 QR 코드 스캔 실시 본문

Android

140. (AndroidStudio/android/java) zxing 라이브러리 사용해 QR 코드 스캔 실시

투케이2K 2021. 5. 12. 11:14

/* =========================== */

[ 개발 환경 설정 ]

개발 툴 : AndroidStudio

개발 언어 : java

/* =========================== */

/* =========================== */

[소스 코드]

[gradle 설정 코드]

[build.gradle(Project) 파일]
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.0"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        // ==== [QR 사용 위함] ====
        maven { url "https://jitpack.io" }

        // ==== [스캔 사용 위함] ====
        mavenCentral()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}








[build.gradle(Module:app) 파일]
implementation 'com.github.kenglxn.QRGen:android:2.6.0'
implementation 'com.journeyapps:zxing-android-embedded:3.5.0'
implementation "com.google.zxing:core:3.3.0"

​

[JAVA : QR 스캔 코드]

        //TODO [QR 스캔 데이터 확인]
        barcodeScannerView.decodeContinuous(new BarcodeCallback() {
            @Override
            public void barcodeResult(BarcodeResult result) {
                try {
                    String result_data = "";
                    if(captureFlag == false){ //TODO [최초 1번 스캔된 경우]
                        result_data = String.valueOf(result.toString());
                        byte result_byte [];
                        //TODO Arrays.toString 형식 바이트 문자열 [104,101,108,108,111]
                        if(result_data.contains("[") && result_data.contains("]")
                            && result_data.contains(",")){ //TODO [바이트 값 형식 문자열인 경우 > 한글로 출력]
                            result_byte = getByteArray(result_data);
                            result_data = new String(result_byte, "utf-8");
                        }
                        Log.d("---","---");
                        Log.w("//===========//","================================================");
                        Log.d("","\n"+"[A_QR_Normal_Scan > QR 스캔 정보 확인 실시]");
                        Log.d("","\n"+"[결과 : "+String.valueOf(result_data)+"]");
                        Log.w("//===========//","================================================");
                        Log.d("---","---");

                        //TODO [팝업창 호출 실시]
                        String alertTittle = "[QR 스캔 정보 확인]";
                        String alertMessage = "[정보]"+"\n"+"\n"+String.valueOf(result_data);
                        String buttonYes = "다시 스캔";
                        String buttonNo = "종료";
                        new AlertDialog.Builder(A_QR_Scan.this)
                                .setTitle(alertTittle)
                                .setMessage(alertMessage)
                                .setCancelable(false)
                                .setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        //TODO Auto-generated method stub
                                        //TODO [다시 스캔을 하기 위해 플래그값 변경]
                                        captureFlag = false;
                                    }
                                })
                                .setNegativeButton(buttonNo, new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        // TODO Auto-generated method stub
                                        try {
                                            //TODO [액티비티 종료 실시]
                                            finish();
                                            overridePendingTransition(0,0);
                                        }
                                        catch (Exception e){
                                            e.printStackTrace();
                                        }
                                    }
                                })
                                .show();

                        //TODO [플래그 값을 변경 실시 : 중복 스캔 방지]
                        captureFlag = true;
                    }
                }
                catch (Exception e){
                    e.printStackTrace();
                }
            }
            @Override
            public void possibleResultPoints(List<ResultPoint> resultPoints) {
            }
        });
​

[XML : activity_a_qr_scan.xml]

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:id="@+id/parent">

    <!-- 카메라 영역 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:layout_gravity="center"
        android:background="#000000"
        android:layout_marginTop="0dp"
        android:layout_marginLeft="0dp"
        android:layout_marginRight="0dp"
        android:layout_marginBottom="0dp">

        <com.journeyapps.barcodescanner.DecoratedBarcodeView
            android:id="@+id/barcodeScannerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="visible" />

    </LinearLayout>

</LinearLayout>

​

/* =========================== */

/* =========================== */

[결과 출력]

/* =========================== */

/* =========================== */

[파일 첨부 : 전체 소스코드]

QR 스캔 소스코드.txt
0.01MB

 

/* =========================== */

 

반응형
Comments