티스토리 뷰

어떤 좋은님께서 지나가다 댓글을 달아 주셨네요

[ https://github.com/journeyapps/zxing-android-embedded ]

요즘은 그냥 프로젝트 만들어서 Ctrl C + V 2~3번만 하면 되네요.

아래 내용은 이제 무시해 주세요 ^^


 

지난 번에 이어, zxing 바코드 라이브러리 이용하기에 대해 글을 쓴다.


목표는 zxing 바코드 라이브러리를 이용해서 나만의 QR 바코드 스캐너 를 만드는 것이다.



[준비사항]

먼저, zxing 바코드 라이브러리(JAR)를 받는다. 기 컴파일 된 버전을 배포하고 있다.


다운 위치 : http://repo1.maven.org/maven2/com/google/zxing/ 

상기 위치 오류 나면 , https://github.com/zxing/zxing/wiki/Getting-Started-Developing 에서 Just Need JAR 에 걸려 있는 링크로 이동하면 된다.


(현재 남기는 글에서는 3.2 버전으로 진행한다.)


또하나, 이걸로 카메라 제어를 포함해서 완전히 커스터마이징 하면 시간이 오래 걸리니... ZXING 에서 이미 만들어 놓은 프레임을(소스코드를) 이용하도록 한다. 


이를 이용하면, 내 엑티비티에 QR 스캐너를 빠른 시간에 올릴 수 있다.


ZXING 코드 다운로드

다운 위치 : https://github.com/zxing/zxing 에서 왼쪽편에 보면 zip 파일 다운로드가 되는 곳이 있다.


[내 앱에 넣기 시작]


1. 안드로이드 스튜디오 프로젝트에서 만든 폴더내의 libs 폴더에 core.jar 파일을 넣는다.

app > libs > core X.X.jar 이런 식으로 될 것이다.


2. 안드로이드 스튜디오 모듈 추가


 안드로이드 스튜디오 프로젝트에서 우 클릭하여 Open Module Setting > 모듈(app) 선택 > Dependencies 에서 

오른쪽 상단의 + 버튼을 누르고 File Dependency 선택 > libs 폴더 선택.


아래와 같이 나타난다.



이렇게 하면 jar 파일 추가가 끝났다.


3. zxing 소스 코드 추가


다운 받았던 zxing 소스코드의 압축을 풀어 주면, android 폴더가 보일 것이다.

여기서, zxing 소스코드 중 src\ 이하의 폴더를 모두 내 프로젝트의 src\main\java 폴더 밑으로 복사한다.


 내가 만든 프로젝트 이름이 barcordTest 라면, 아래와 같이 폴더 구조가 생성된다.


이렇게 하면 zxing 소스코드 옮기기가 끝난다.


4. xml, res 파일 맞추기

이렇게 하고 컴파일 하면 당연히 에러가 우수수 떨어진다. 이제, xml 파일을 맞춰야 한다.

먼저, zxing 소스에서 layout 폴더의 xml 들을 내 프로젝트의 layout 폴더로 복사해 온다.

그다음, zxing 소스에서 raw 폴더를 내 프로젝트의 res 폴더로 복사해 온다. (내 프로젝트에 res 에는 원래 raw 폴더가 없다.)

그다음, zxing 소스에서 value 폴더의 xml 들을 내 프로젝트의 value로 복사해 온다. 

(단, string.xml 같은 파일은 겹쳐쓰기 되는데, 이때 기존에 내가 지정한 string value 가 사라지니, 기억했다가 복사 후 추가해 준다.)

zxing 소스의 xml 폴더를 내 프로젝트의 xml로 복사해 온다.

zxing 소스의 drawable 폴더에서 아이콘들을 복사해 온다.

....

이렇게 수작업으로 다 옮겨 준다.



5. R.layout, R.xml 등등 R 로 시작하는 파일이 없다고 찾는다.

이런 오류나는 파일들 상단에 아래와 같이 선언한다.


import 패키지명.R

ex> 예를 들어, import com.test.barcodeTest.R; 


원래는 zxing 프로젝트의 R을 참조하겠지만, 이제는 내 프로젝트로 다 옮겨 왔기때문에 R.~~~~ 으로 시작되는걸 못찾겠다고 하면, 다 저런 식으로 내 프로젝트의 R 파일을 참조하도록 수정해 준다.


6. Manifest.xml 파일 수정


<activity android:name="com.google.zxing.client.android.CaptureActivity"
android:screenOrientation=
"landscape"
android:clearTaskOnLaunch=
"true"
android:stateNotNeeded=
"true"
android:configChanges=
"orientation|keyboardHidden"
android:theme=
"@android:style/Theme.NoTitleBar.Fullscreen"
android:windowSoftInputMode="stateAlwaysHidden">
<intent-filter>
<action android:name="com.google.zxing.client.android.SCAN"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>


내 앱에서 호출 가능하도록 위의 부분을 추가한다.


7. 코드에서 호출


Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "ALL");

startActivityForResult(intent, 0);


여기서 한가지, SCAN_MODE 를 설정하지 않으면, 기본으로 QR코드(2D 바코드)만 읽혀진다.


8. 스캔 값 받아오기.


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

if(requestCode == 0) {

if(resultCode == Activity.RESULT_OK)
{
String contents = data.getStringExtra("SCAN_RESULT")
;
//위의 contents 값에 scan result가 들어온다.

}

}

super.onActivityResult(requestCode, resultCode, data)
;
}


9. 기타


나는 camera 폴더와 result 폴더를 제외한 모든 폴더를 지우고, 메뉴, 헬프메뉴, 설정메뉴, 히스토리 관리 등을 모두 지워버렸다.


내 앱에서는 불필요 했으니까.... 


호출 안되게 막기만 하는 거면, zxing 소스의 captureActivity에서 메뉴 등을 주석처리 해버리면 된다.


아무튼, 이렇게 까지 진행하면 zxing 바코드 스캐너를 설치하지 않고, 바코드의 정보를 내 앱에서 읽어올 수 있다.


클래스가 없다는 오류를 많이 격으신 것 같아 일단 샘플 프로그램(안드로이드 스튜디오용) 올림.

-> 누군가가 프로젝트에 바이러스가 있다고 하셔서 내렸습니다. 제가 바이러스 심을 실력까진 아직 안되는데요 ㅎㅎㅎ


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함