Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

모바일 앱(안드로이드)

안드로이드 바코드 스캐너 연동을 활용한 기능 구현 이야기

Billcorea 2021. 9. 8. 22:20
반응형

오늘은 barcode 인식을 이용한 앱 구현에 대한 정리를 해 볼까 한다.    이 기능 구현의 시작은 어느 티비에서 방송했던, 어쩌다 사장  이라는 방송에서 출연진들이  원래 가게 주인이 적어든 가격표를 찾아가면서 판매를 하는 것을 보고, 단순한 바코드 인식을 통해 pos 을 구현해 볼 수 있을 까 하는 생각에서 출발한다.

dependencies {

    .....
    implementation 'com.journeyapps:zxing-android-embedded:4.0.0'
    .....
}

먼저 gradle 파일에 implementation 을 추가한다. 구글링을 통해서 발견한 barcode 인식을 위한 준비라고나 할까 ?

그리고 사용하는 방법은 activity 에서 호출해 주기만 하면 되고, onActivityResult 에서 응답으로 바코드 인식된 값을 돌려 받아 처리 하면 된다. 다음 source code 을 보자.

........

import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    IntentIntegrator integrator;
    
    ......

    @Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        .....

        binding.btnQRscan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                integrator = new IntentIntegrator(MainActivity.this);
                //바코드 안의 텍스트
                integrator.setPrompt(getString(R.string.msgViewBarCode));
                //바코드 인식시 소리 여부
                integrator.setBeepEnabled(false);
                integrator.setBarcodeImageEnabled(true);
                integrator.setCaptureActivity(CaptureActivity.class);
                //바코드 스캐너 시작
                integrator.initiateScan();
            }
        });

        ......

        onDispData(strMode, productNameValue);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if(result != null){
            if(result.getContents() == null){
                // 바코드 인식이 안된 경우의 처리
                doHandwork("") ;
            }else{
                //barcode 코드를 읽어서 EditText에 입력해줍니다.
                binding.et.setText(result.getContents());
                
                .....
                
                KakaoToast.makeToast(this, "Scanned: " + result.getContents(), Toast.LENGTH_SHORT).show();
            }
        }else{
            super.onActivityResult(requestCode, resultCode, data);
        }
    }

    .....

}

전체 소스 중에서 바코드 처리 부분만 남겼는데,  버튼 클릭으로 barcode 인식 activity 을 호출 하고 응답이 돌아오면 그 값을 edittext 에 넣어주는 것으로 처리를 남겼다.  source 에서 보면integrator.setPrompt(getString(R.string.msgViewBarCode)); 을 통해서 바코드 인식하는 화면에 메시지를 넣어준 것으로 볼 수 있을 것이다.

이런 예시 화면 처럼 화면에 메시지를 보여줌으로 해서 사용자에게 동작을 인식시키는 기능도 구현이 가능 하다.

바코드 인식부의 중간에는 기준선이 빨간색으로 표시 되어 있어 사용이 수월하게 진행 될 수 있다.

source code 을 보면 barcode 사용을 위해서  integrator.setCaptureActivity(CaptureActivity.class); 처럼 activity을 호출 하는데, 여기 명시된 CaptureActivity 는 내가 작성한 것이 아니고, 

(2021.09.09 수정) gradle 에서 선언한 com.journeyapps:zxing-android-embedded:4.0.0 이 안에 들어 있는 class 인데, 이것을 다시 정의하는 클래스만 을 선언 하면 된다.

public class CaptureActivity extends com.journeyapps.barcodescanner.CaptureActivity {

}

완전 깔금 하지 않은가 ...

 

 

 

 

 

다른 화면들을 보면 이렇게 구동을 확인해 볼 수 있다.

이렇게 해서 구현된 앱은 참고로 

https://play.google.com/store/apps/details?id=com.billcoreatech.boss0426 

 

우연히 사장 - Google Play 앱

우연히 사장이 되신 분들의 건투를 빌며.

play.google.com

 

playstore 에서도 확인해 볼 수 있다.

 

반응형