마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

zxing를 이용 QR코드를 사용할려는데 도움좀 부탁드립니다.

0 추천
ZXing2.3버전을 다운받아서 압축풀고 이클립스에서 프로젝트를 import해보니까

CaptureActivity라는 프로젝트가 있더군요 프로젝트에 에러가 있었는데 core3.1.jar화일을 다운받아서 libs폴더에 넣어주니까 에러가 모두 사라지고 CaptureActivity프로젝트를 실행 시켜보니 바코드캡처 어플이 실행되더군요. 구글 play스토어에서 다운받을수 있는 ZXing사의 '바코드스캐너'와 같은 어플이더군요

 제가 구현하고 싶은건 제 어플에서 이 바코드스캐너를 실행하고 싶어서 검색을 해보니까 CaptureActivity전체를 jar화일로 만들어서 제 어플의 libs폴더에 넣으면 된다고 하는데 CaptureActivity를 한꺼번에 jar화일로 만드는게 안되네요. 검색해보니 CaptureActivity프로젝트의 res폴더에 있는 내용은 jar로 같이 묶을수가 없다고 하네요(혹시 묶을수 있는 방법이 있을까요?)

 그래서 방법을 찾다가 CaptureActivity프로젝트를 Properties-Android 메뉴에서 라이브러리로 만들고 제 어플에서 CaptureActivity프로젝트를 라이브러리로 추가하였습니다.

메니페스트 화일에서 카메라관련 퍼미션들 추가해주고

<activity
     android:name="com.google.zxing.client.android.CaptureActivity"
     android:screenOrientation="landscape"
     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>  추가하였습니다.

 

그리고 제 어플에서

Intent intent = new Intent("com.google.zxing.client.android.SCAN");
startActivity(intent);

을 추가해서 어플을 실행시키고 QR코드실행버튼을 클릭하니까 작업을 수행할때 사용하는 어플리케이션을 선택하라는 팝업창이 뜨네요.

 바코드스캐너 어플이 이미 설치되어 있으면 바코드스캐너 어플 선택해서 실행할수는 있는데 제가 원하는건 제 어플에 바코드스캐너를 포함시켜서 자체적으로 실행 시키고 싶은데 어떻게 하면 될까요? 도움 바랍니다.
비상운전 (620 포인트) 님이 2015년 2월 16일 질문

3개의 답변

+1 추천

CaptureActivity는 어디까지나 zxing 예제 샘플이구요. 그냥 간단하게 

질문자님 프로젝트에 core-x.y.z.jar 만 추가하시고 사용 하시면 됩니다..

물론 구현하실려면 CaptureActivity qr코드 스캔 부분 분석은 필요하겠죠? 

대충 카메라로 qr코드 사진찍고 비트맵 받아와서 

QrcodeReader.decode 에다가 qr코드 사진 비트맵

주면 알아서 qr코드 데이터 뱉어냅니다.

그리고 작년만해도 3.x버젼있었는데 2.3이라뇨..? ㄷㄷ

 

익명사용자 님이 2015년 2월 16일 답변
감사합니다. 3.2가 최신이네요 전문 개발자가 아니다보니 쉽게 그냥 가져다가 쓸려고 했는데 잘안되네요.
0 추천

xzing라이브러리 포함 하셨으면 명시적 인텐트로 실행시키면 될텐데요.

Intent intent = new Intent( this, CaptureActivity.class );

startActivity(intent);

안되나여?

여룽이 (4,750 포인트) 님이 2015년 2월 16일 답변
02-16 07:26:11.762: E/AndroidRuntime(618): FATAL EXCEPTION: main
02-16 07:26:11.762: E/AndroidRuntime(618): java.lang.RuntimeException: Unable to resume activity {choo.choo.Tcms/com.google.zxing.client.android.CaptureActivity}: java.lang.NullPointerException
02-16 07:26:11.762: E/AndroidRuntime(618):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2575)
02-16 07:26:11.762: E/AndroidRuntime(618):     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2603)
02-16 07:26:11.762: E/AndroidRuntime(618):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2089)
02-16 07:26:11.762: E/AndroidRuntime(618):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
02-16 07:26:11.762: E/AndroidRuntime(618):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
02-16 07:26:11.762: E/AndroidRuntime(618):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-16 07:26:11.762: E/AndroidRuntime(618):     at android.os.Looper.loop(Looper.java:137)
02-16 07:26:11.762: E/AndroidRuntime(618):     at android.app.ActivityThread.main(ActivityThread.java:4745)
02-16 07:26:11.762: E/AndroidRuntime(618):     at java.lang.reflect.Method.invokeNative(Native Method)
02-16 07:26:11.762: E/AndroidRuntime(618):     at java.lang.reflect.Method.invoke(Method.java:511)
02-16 07:26:11.762: E/AndroidRuntime(618):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-16 07:26:11.762: E/AndroidRuntime(618):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-16 07:26:11.762: E/AndroidRuntime(618):     at dalvik.system.NativeStart.main(Native Method)
02-16 07:26:11.762: E/AndroidRuntime(618): Caused by: java.lang.NullPointerException
02-16 07:26:11.762: E/AndroidRuntime(618):     at com.google.zxing.client.android.CaptureActivity.onResume(CaptureActivity.java:157)
02-16 07:26:11.762: E/AndroidRuntime(618):     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1184)
02-16 07:26:11.762: E/AndroidRuntime(618):     at android.app.Activity.performResume(Activity.java:5082)
02-16 07:26:11.762: E/AndroidRuntime(618):     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2565)
02-16 07:26:11.762: E/AndroidRuntime(618):     ... 12 more

방금해봤는데 위와같은 에러가 발생하네요
0 추천

intent = new Intent("com.zxing.SCAN");

intent.setClassName("내 패키지명", "com.google.zxing.client.android.CaptureActivity"); 
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, RequestCode);

요로콤 호출 하시면 됩니다.

 

startActivityForResult로 호출 하셔야 QR코드 리딩된 값을 받아 올 수 있습니다.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
 
요고 작성해주는건 말 안해도 아시겠죠?
 
 
 
그래도 에러 나시면
 
라이브러리 프로젝트의 메니페스트에 작성된 모든 activity를 메인 프로젝트 메니페스트로 복사해 보세요.
 
 
이드로이드 (22,930 포인트) 님이 2015년 2월 16일 답변
이드로이드님이 2015년 2월 16일 수정
...