loading

프로그래밍/안드로이드

[Android Studio] 바코드스캐너 프로그램 구현

침착곰 2021. 4. 20. 17:11
반응형

안녕하세요

안드로이드로 구동되는 바코드스캐너의 바코드스캔 기능을 구현한 것에 대해서 설명해보겠습니다

워낙에 자료가 없어서 이 블로그를 보시고 이런 것을 구현하는 경우가 있으신 분들은 참고하시면 좋겠습니다

 

구현할 때 사용한 바코드스캐너의 모델은 M3입니다

요렇게 생겼네요

 

이제 바코드스캔 구현소스에 대해서 알아보겠습니다

1. 바코드로 스캔을 하게 되면 dispatchKeyEvent란 Event를 타게됩니다

 그 중에서 Action은 ACTION_UP 이벤트를 탄 경우 DeviceID, Flags, KeyCode, getSource 등 바코드를 스캔한 경우

 Event가 일치할 때 바코드스캔 로직을 타도록 구현하였습니다

 바코드 스캔도 마찬가지로 키보드 이벤트와 동일한 이벤트를 타게됩니다

 이런 식으로 차별을 두어서 구현을 합니다

1
2
3
4
5
6
7
8
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    if (KeyEvent.ACTION_UP == event.getAction() && event.getDeviceId() == -1 && event.getFlags() == 8 && event.getKeyCode() == 66 && event.getSource() == 257) {
        String scan = readFromClipboard();
        
        return false;
    }
}
cs

 

2. 이어서 dispatchKeyEvent에 있는 readFromClipboard()의 역할은 바코드를 스캔하게 되면 클립보드에 스캔한 데이터가 생성이 됩니다

 그 생성된 데이터를 string으로 가져오는 메소드입니다

1
2
3
4
5
6
7
8
9
10
11
12
13
public String readFromClipboard() {
    ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        if (clipboard.hasPrimaryClip()) {
            ClipDescription description = clipboard.getPrimaryClipDescription();
            ClipData data = clipboard.getPrimaryClip();
            if (data != null && description != null && description.hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN))
                return String.valueOf(data.getItemAt(0).getText());
        }
    }
 
    return null;
}
cs

 

여기까지 안드로이드를 사용하는 바코드스캐너의 안드로이드 바코드스캔 소스에 대해서 알아봤습니다

바코드스캐너를 개발하는 분들이라면 참고가 되었으면 좋겠습니다

반응형
그리드형