남잭슨의 개발 블로그

[Android]QR코드, 바코드 리더 라이브러리 Zxing 1.사용법 본문

Android

[Android]QR코드, 바코드 리더 라이브러리 Zxing 1.사용법

남잭슨 2017. 8. 8. 15:40

android 개발중

QR 코드 및 바코드 카메라를 사용하여 인식을 사용하는 앱을 개발해야 할때가 있다!

이번에 소개하는 라이브러리는 zxing 는 바코드 / QR코드 리더에 유명한 오픈소스 라이브러리입니다!



구글에서 제공하는 오픈소스로 Zebra Crossing의 약자.

QR코드 스캔 어플리케이션의 대다수가 이 어플리케이션을 이용했다고 해도 과언이 아닐정도로 널리 쓰이고 있는 코드다.

다양한 바코드를 인식할 수 있다.

인식할 수 있는 바코드 종류는 총 15 가지.

출처 : https://namu.wiki/w/ZXing


나무위키에 설명이 나와있지만 , 구글에서 제공하는 오픈소스이고,

대부분의 QR코드 바코드 스캔 APP들이 사용하고 있는 유명한 라이브러리이다!

동작순서는 아래와 같다


- 카메라를 연 후 프리뷰를 가동한다. 
- 카메라로부터 지속적으로 영상을 받아들인다. [2]
- 영상에서 밝기값만 추출[3]하여 이를 기반으로 이진화를 수행한다.[4]
- Detector 클래스를 통해 QR코드 영역을 찾아냈다. 
- 찾아낸 영역을 Decoder 클래스를 통해 해석한다. 
- 결과 값과 결과 영상을 리턴
- 결과 값을 분석하여 URL일 경우 탭하면 인터넷으로 연결되도록 한다. 
- 화면에 결과 영상과 결과 값을 출력한다.


이제 zxing 라이브러리의 사용법을 알아보자!

예전에는 zar 파일을 다운받아 사용하고나, 코드를 가져다가 사용하는 경우가 많았다고 하지만

요새는 Android Studio에서 Gradle만 추가하면 된다! .


 apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "26.0.0"
    ...
}

dependencies {
    ...
    compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar'
    compile 'com.google.zxing:core:3.2.1'
    ...
}


위와같이


를 build.Gradle (Module: app)에 추가해 주면 됩니다!


추가후

AndroidManifest.xml에도 다음 코드를 추가합니다.

<activity android:name=".qr.CaptureActivityAnyOrientation"
android:screenOrientation="fullSensor"
android:stateNotNeeded="true"
android:theme="@style/zxing_CaptureTheme"
android:windowSoftInputMode="stateAlwaysHidden"
/>


추가해준 다음 아래와 같이 사용하면 된다.



        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new IntentIntegrator(TabActivity.this).initiateScan();
            }
        });

Fab 버튼을 통해서 바코드 리더를 실행시킵니다!


 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);

        // QR코드/ 바코드를 스캔한 결과
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        // result.getFormatName() : 바코드 종류
        // result.getContents() : 바코드 값
        mTextMessage.setText( result.getContents() );
    }

해당 바코드의 결과값은 new IntentIntegrator(현재액티비티명).initiateScan()을 실행시킨 Activity 내에서

onActivityResult를 작성하면 값을 받아올수 있습니다.







바코드 리더를 실행시키면 해당 카메라인식이 켜지게되고, 바코드나 QR코드를 읽어옵니다.


















이렇게 간단하게 라이브러리를 추가하여 사용할수 있습니다.

바코드 QR코드 리더기를 구현하셧습니다.


다음글에서는 Zxing

1. 회전하지않고, 세로로 사용하기

2.커스텀하기

에 대해서 포스팅을 하겠습니다.




Comments