본문으로 바로가기

[안드로이드]커스텀 zxing(custom바코드스캐너)

category Android 2017. 8. 29. 10:55

안녕하세요.


오늘은 안드로이드 스튜디오에서 사용되는 라이브러리중 하나인 zxing 을 알아보도록 하겠습니다.


zxing 은 안드로이드에서 바코드인식을 하기위해 많이 사용합니다.


https://github.com/journeyapps/zxing-android-embedded#custom-layout

(zxing 라이브러리 github입니다)


zxing 을 이용하여 바코드 인식하는 정보는 매우 많은데요. 


바코드를 커스텀하는 내용은 많이 없어서 이번에 간단히 바코드화면에 버튼을 넣은 간단한 커스텀 zxing을 알아보겠습니다.


(현재 만들고 있는 어플에 사용될 스캔화면)


보시는것처럼 좌측상단과 우측상단에 이미지 버튼을 만들어주어 톱니바퀴 모양을 누를경우 환경설정, 번개? 모양을 누를 경우 어두운 공간에서도 스캔이 가능하게 핸드폰의 라이트를 켜고 끌 수 있는 기능을 만들어두었습니다.


github의 자료를 받으시면 누구나 조금의 분석만 하면 커스텀할수 있습니다.


하지만 그 시간도 절약 할 수 있게 간단히 알려드릴게요.


compile 'com.journeyapps:zxing-android-embedded:3.5.0'

먼저 zxing사용을 위해 dependencies 에 zxing라이브러리를 추가해 줍시다!


다음으로 저는 4개의 클래스를 사용하였습니다.


AnyOrientationCaptureActivity 는 스캔화면의 세로형을 위해 만듭니다.

public class AnyOrientationCaptureActivity extends CaptureActivity {

}

CaptureActivity를 상속받는 빈 class를 만들어서 

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

manifests 에 엑티비티를 추가해주면 세로모드가 가능합니다.



BackPressCloseHandler 는 제가 필요해서 만든 class 로 저는 main화면이 스캐너화면이라 onResume 에서 스캔화면을 계속불러 오기때문에 한번의 close로는 종료가 되지않아 두번 누르면 activity.finishAffinity(); 모든 엑티비티가 종료되도록 만들어 두었습니다. 이 finishAffinity() 는 api16 이상부터 사용가능합니다.


CustomScannerActivity 는 커스텀스캐너를 불러오고 라이트 넣어놓은 class 입니다.

    private CaptureManager capture;
    private DecoratedBarcodeView barcodeScannerView;

여기서는 CaptureManager와 DecoratedBarcodeView 를 통해 커스텀한 xml을 불러와 스캔화면에 적용시켜줍니다.

barcodeScannerView = (DecoratedBarcodeView)findViewById(R.id.zxing_barcode_scanner); barcodeScannerView.setTorchListener(this);

DecorateBarcodeView 에 만들어둔 xml 을 적용시키고 라이트를 켜고끄기위한 Torch리스너를 연결하였습니다.


        capture = new CaptureManager(this, barcodeScannerView);
        capture.initializeFromIntent(getIntent(), savedInstanceState);
        capture.decode();

그리고 CaptureManager 에 DecorateBarcodeView 를 연결시켜준뒤 decode 를 해주면 됩니다.



Main 에서는 

        IntentIntegrator integrator = new IntentIntegrator(this);
        integrator.setCaptureActivity(CustomScannerActivity.class);
        integrator.initiateScan();

커스텀 엑티비티를 initiateScan() 해주어 스캔을 불러와서 사용할수있게 하였습니다. 저는 Resume 에서 불러와 계속스캔화면을 불러올수 있게 하였습니다(main이 스캔)


그리고 결과값을 받아오기위하여 

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        Log.d("onActivityResult", "onActivityResult: .");
        if (resultCode == Activity.RESULT_OK) {
            IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
            String re = scanResult.getContents();
            String message = re;
            Log.d("onActivityResult", "onActivityResult: ." + re);
            Toast.makeText(this, re, Toast.LENGTH_LONG).show();
        }
    }

onActivityResult 를 오버라이드하여 바코드값을 토스트로 확인할수 있습니다.



xml은 

activity_custom_scanner 에서 custom_barcode_scanner 를 layout하게 되어있습니다.




글을 쓰다보니 내용이 이상해 진거 같은데 ㅜㅜ


자세한 코드나 도움이 필요하면 댓글남겨주세요



--------------------------------------------------------------------------------------------------------------------------------------

코드원하시는분이 많아 깃에 올려두었습니다.

https://github.com/dolsanta/CustomZxingTest


댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 2018.01.29 14:24

    비밀댓글입니다

  3. minibee 2018.02.19 12:28

    안녕하세요,
    zxing 을 사용하여 barcode scan을 구현하려고 하는데요
    검색중에 님의 사이트를 접속하게 되었습니다.
    소스 보내주시면 많은 도움이 될것 같습니다.
    괜찮으시다면, 아래이메일로 예제 파일 부탁 드리겠습니다. 감사합니다.
    spirit_accord@hanmail.net

  4. 2018.02.19 18:17

    비밀댓글입니다

  5. 손영기 2018.02.20 20:16

    안녕하세요.
    바코드를 스캔해야되는 앱을 만들어 보려고 검색해보니 ZXing을 많이 언급했더군요.
    그래서 ZXing을 사용한 예제를 찾아봤는데 별로 없어서 고생을 하고 있습니다.
    github를 찾아봐도 영어가 짧아서 뭔 말인지도 잘 모르겠고...
    검색을 하다가 이 글을 보게 되었는데, 많은 분들이 도움을 받은 것 같네요.
    님의 소스가 있으면 도움이 될 것 같아서 글을 남깁니다.
    이메일 주소를 남깁니다. 부탁드려요. 감사합니다.
    ykshon0125@hanmail.net

  6. 녹차라떼 2018.03.07 17:02

    안녕하세요. 바코드 관련하여 블로그를 검색하다가 오게 되었습니다. 바코드 구현하는데 코딩벌레님의 코드를 참조하여 분석을 하고 싶은데 실례지만 예제파일을 받을 수 있을까요. shyshy0616@naver.com으로 보내주시면 정말 감사하겠습니다!

  7. jhhyeon 2018.03.14 12:20

    저도 염치불구하고 샘플소스 자료공유 부탁드립니다.

    하고있는 공부에 많은 도움이 될것 같습니다.

    guswogh@naver.com 입니다

    감사합니다~~

  8. 바코드공부 2018.03.15 12:57

    안녕하세요?
    좋은 자료 공유해주셔서 감사합니다.
    막상 해 볼려니 잘 안되네요..
    예제 소스좀 부탁 드립니다.

    kss1706@naver.com

  9. 살구씨 2018.03.17 00:30

    바코드 인식 어플 만드는데 ㅠㅠㅠㅠ 계속 시도를 해봐도 안되더라고 멍충이인지 ㅠㅠㅠ블로그님 소스 공유 꼭 좀 부탁드립니다.


    awnlove@naver.com

  10. 공대생 2018.05.26 01:09

    설명 감사드립니다 덕분에 할 수 있엇네요

  11. 밀크쉐이크 2018.06.18 14:03

    좋은자료 감사합니다!

  12. 구름 2018.07.11 05:27

    바코드 스캔말고 생성하는 코드를 알고계시면 소스를 받을 수 있을까요?
    만약 스캔소스와 바코드 생성 코드를 가지고 계시다면 beomsc4749@naver.com로 받을 수 있을까요?

  13. 궁금 2018.10.22 13:38

    잘 되긴 하는데...
    app 수준 gradle 에서 dependencies에 내용 추가하면
    기존에 등록한 implementation 'com.android.support:appcompat-v7:28.0.0' 에서
    빨간줄이 그어지네요.
    버전을 어떻게 맞춰야 빨간줄이 사라질까요...?

    나오는 에러문구는 아래와 같습니다.
    All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 28.0.0, 23.1.0. Examples include com.android.support:animated-vector-drawable:28.0.0 and com.android.support:support-v4:23.1.0 ... 생략

  14. BlogIcon 떡빵 2018.11.26 09:57 신고

    정말 잘 봤습니다!!!
    근데, 한가지 모르겠는게...
    zxing의 인식범위 모서리에
    ⌜ ⌝
    ⌞ ⌟ 이런식으로 표시를 넣고 싶은데, 어찌하면 될까요???

  15. 콩콩밤 2019.07.30 11:49

    안녕하세요 정말 좋은 글 감사합니다 선생님의 자료를 보고 응용해보고 싶은데 어려운 점이 많이서요 혹시 실례가 안된다면 소스코드 공유 가능할까요 ? ㅜㅜkmimi0528@naver.com 입니다 !

  16. 뚜뚜 2019.11.04 04:10

    와 저도 보면서 공부 중인데 소스 코드 응용해서 바코드 바코드를 여러번 스캔 후 값을 저장 하려고 하는데.. 에러가 많이 뜨네요 ㅠㅠㅠ 저도 예제 소스 코드 공유 가능할까요? foreversanta@naver.com 입니다!

  17. 이태삭 2020.05.08 13:18

    공부하고 있는데 많은 도움이 됐습니다 감사합니다!! __꾸벅

  18. 지나가는 나그네 sr 2020.07.02 20:29

    진짜 감사합니다 ㅠㅠ 사랑해요.. 시간을 아꼈습니다

  19. 진우 2020.08.15 19:39

    zxing 스캔화면을 액티비티가 아닌 프래그먼트에 붙일수 있나요? 방법을 찾고있는데 계속 헤매고있습니다ㅠㅠ

  20. 아리엘 2020.10.09 08:07

    안녕하세요 바코드 스태너 공부중입니다.
    arielworld1004@daum.net
    감사합니다.

  21. iamkanguk 2021.09.23 05:27

    안녕하세요! 바코드 스캐너 앱 구현을 목표로 하고있는데 zxing 사용하기 좀 벅참을 느끼고 있습니다
    rkddnrdl97@naver.com으로 소스코드 보내주시면 정말 감사하겠습니다! :)
    행복한 하루 보내세요!