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

zxing 바코드 소스를 이용 중에 생기는 에러 관련 질문드립니다!!!!!!!!ㅠㅠㅠㅠㅠㅠ

0 추천

제가 zxing 바코드 소스를 이용하면서 도저히 해결 할 수 없는 문제가 생겨 이렇게 질문드립니다..ㅠㅠㅠ

액티비티 내 어떤 특정 버튼을 클릭 시 바코드 스캐너가 실행되게 하는 시스템 인데요.
제가 버튼을 클릭 하면 어플이 멈춰 버리고 오류와 함께 종료됩니다...
아래는 오류에 대한 로그캣입니다.
 
error.JPG
 
일단 core.jar 파일을 어플리케이션 프로젝트에 대해 import를 아래와 같이 시켰습니다.

corejar.JPG
 
그리고 아래 그림은 바코드 스캐너 처리에 대한 zxing이 제공하는 클래스 들입니다. 이 파일들을 프로젝트 내 넣었습니다.

barcode.JPG
 
아래 그림은 오류 로그캣에 나오는 부분입니다. 노란 음영이 로그캣에 표시된 부분입니다. 저기에서 오류가 났습니다..

errorpart.JPG
 
이 아래 그림은 IntentIntegrator.java 클래스 인데요.. 혹시 아래 노란 음영 PACKAGE의 내용을 바꿔야 하는 부분인가요?

question.JPG

 
이클립스에서는 잘됐는데 왜 안드로이드 스튜디오에서는 잘 안되는지 모르겠습니다...ㅠㅠㅠㅠ
고수님들의 많은 조언 부탁드립니다...ㅠㅠㅠ
징구야널자 (180 포인트) 님이 2015년 5월 4일 질문

1개의 답변

0 추천

Android framework 쪽 소스를 좀 살펴보니 FragmentActivity에서 발생하는 Exception으로 확인되네요.

/**
* Modifies the standard behavior to allow results to be delivered to fragments.
* This imposes a restriction that requestCode be <= 0xffff.
*/
@Override
public void startActivityForResult(Intent intent, int requestCode) {
    if (requestCode != -1 && (requestCode&0xffff0000) != 0) {
        throw new IllegalArgumentException("Can only use lower 16 bits for requestCode");
    }
    super.startActivityForResult(intent, requestCode);
}

위의 부분에서 throw되어 exception이 발생한것으로 보입니다.

 

아마도 REQUEST CODE자체가 0xffff 보다 높은 수를 사용하시는 것 같습니다. (65535보다 큰 수)

가장 쉬운 방법은

1. intent를 전달하실 때 request code를 65535보다 작게 만들거나 (그러면서 0보다는 커야 할겁니다.)

2. startActivityForResult를 override 하셔서 request code를 변경하시는 것으로 보입니다.

 

나머지 코드는 보이지 않아서 추가적으로 답변드리기는 힘들것 같네요

빅클라인 (4,520 포인트) 님이 2015년 5월 4일 답변
제가 매우 하수라서... 어떻게 건드려야할지 모르겠는데요... request code를 어떻게 변경하죠?? IntentIntegrator.java 클래스 전역변수 부분에  public static final int REQUEST_CODE = 0x0ba7c0de; 라고 선언되있는데 이것을 변경하라는 말씀이신가요?ㅠㅠㅠ
...