관리 메뉴

드럼치는 프로그래머

[안드로이드] zxing을 활용한 QR code, 바코드 앱개발하기 본문

★─Programing/☆─Android

[안드로이드] zxing을 활용한 QR code, 바코드 앱개발하기

드럼치는한동이 2016. 6. 1. 13:03
 앱을 개발하다보면 특정 기능 때문에 난감한 경우가 많다. 앱의 주요 기능이 아니지만 개발 시간도 많이 걸리고 경우에 따라서는 어떻게 개발할지 난감한 기능들이 있는데 QR 코드 인식 기능도 그중에 하나이다. 이럴 경우 주로 Open Source를 뒤져보게 된다. QR 코드 관련되서는 ZXing이라는 훌륭한 open source가 있다. Apache License 2.0이라 License만 명시하면 소스를 공개하지 않고 자유롭게 상업적으로도 활용할 수 있다. 현재까지 최신 버전은 2.1 버전이며 Android 에서 Library로 사용하는 법은 다음과 같다. 


1.  ZXing2.1.zip을 다운 받는다.  다운로드 받는 곳 : http://code.google.com/p/zxing/downloads/list

 


 

2. 압축을 해제하면 다음과 같은 폴더구조가 나타난다.


 


3. 여기서 core/core.jar를 사용하면 ZXing QR 코드바코드 인식 기능을 사용할 수 있다. 라이브러리를 다운받아서 android/ 폴더에 있는 예제를 실행해보면 알 수 있겠지만 라이브러리에 함께 들어가 있는 core.jar를 그대로 사용하면 android 버전에 따라 앱이 비정상 종료를 일으키는 경우가 있다. 이를 해결하기 위해서는 별도로 core.jar를 빌드해주어야 한다.


4. core.jar를 빌드하기 위해서 ant.apache.org에서 ant관련 package를 다운 받는다.


다운로드 받는 곳http://ant.apache.org/bindownload.cgi


아래 이미지 처럼 왼쪽의 Binary Distributions를 누르고 apache-ant-1.8.4-bin.zip을 다운 받는다. linux나 다른 OS의 경우는 적당한 binary를 다운 받는다. 


 


5. 적당한 곳에 압축을 푼다. 여기서는 D:/program Files/apache-ant-1.8.4에 압축을 풀었다.


6. 제어판 > 시스템 > 고급시스템  설정 > 환경변수 > 시스템 변수에서 아래 그림과 같이 path 맨 마지막에 ant의 경로를 추가한다.


 


7. ZXingcore/ 폴더로 이동해서 다음과 같이 빌드한다.


 

 C:\ZXing-2.1\core>ant 

 Buildfile: C:\ZXing-2.1\core\build.xml


 init:


 build: 

        [jar]  Building jar: C:\ZXing-2.1\core\core.jar


 BUILD SUCCESSFUL

 Total time:  2 seconds

 C:\ZXing-2.1\core>_ 

 


 


8. 빌드하고 나면 해당 폴더에 core.jar가 생성된 것을 확인할 수 있다.


9. core.jar를 개발하는 Project Lib폴더를 만들어 추가한다음 Window > Preferences > Java Build Path > Add JARs...를 통해 Build Path에 추가한다.


10. 그 후 아래와 같은 코드로 QR code Reader기를 호출할 수 있다.



     Intent intent = new Intent("com.google.zxing.client.android.SCAN");
     startActivityForResult(intent, 0); 

 



11. 위의 코드를 실행하면 다음과 같은 화면이 실행된다.



 12.위의 화면에서 QR Code를 비추면 인식이되며 읽어온 값에 대한 처리는 아래와 같이 할 수 있다.



    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == 0) {
            if (resultCode == RESULT_OK) {
                String contents = intent.getStringExtra("SCAN_RESULT");
                String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
                //여기서 Contents가 인터넷 주소라면 당 URL로 이동하는 코드를 넣는다. 
 
            } else if (resultCode == RESULT_CANCELED) {
                //에러 처리를 해준다.
            }
         }
 

 


  

[출처] http://fishbear.tistory.com/3

Comments