이번 주제는 QR 코드.
요즘은 기본적으로 QR code를 인식하는 다양한 방법 혹은 어플들이 있으니까, 나도 해봐야지.

우리에게 필요한 준비물은 Android SDK, Eclipse, QR code library 정도.

그리 잘 만든 코드는 아니지만 일단 스타드~

우선 QR code library 수집을 위해서 위대하신 우리 Google 느님에게 검색, 검색~
그리고 zxing 이란 녀석을 사용하기로 결정!!
URL : https://github.com/zxing

근데 이거 까보니 너무 많음 바코드도 있고... 기타 등등.. 그래서 귀찮으므로 QR 코드만 따로 빼서 새로 만듬
그리고 생각해보니 code 위주로 작성하는데 복사를 못하게 하면 난감해서 복사방지 풀음...


QR 코드 생성해서 ImageView에 보이도록 하는 부분.

    private class CreateQRCodeAsyncTask extends AsyncTask<String, Void, Bitmap> {
        // QR code 색상
        private static final int WHITE = 0xFFFFFFFF;
        private static final int BLACK = 0xFF000000;

        // QR code bitmap 크기 비율
        private static final float REDUCE_RATIO = 0.8f;

        // 타겟 image view
        private ImageView mTagetView;

        // 화면 크기
        private Point mDisplaySize;

        public CreateQRCodeAsyncTask (Imageview taget, Point displaySize) {
            mTagetView = taget;
            mDisplaySize = displaySize;
        }

        @Override
        protected Bitmap doInBackground(String... params) {
            // zxing library class (QR code writer)
            QRCodeWriter qrCodeWriter = new QRCodeWriter();

            try {
                // 화면 비율 대비 QR 코드 이미지 크기 조정
                int temp = mDisplaySize.x;

                if (temp > mDisplaySize.y) {
                    temp = mDisplaySize.y;
                }

                int dWidth = (int) ((float) temp * REDUCE_RATIO);
                int dHeight = (int) ((float) temp * REDUCE_RATIO);

                // QR code로 인코딩해서 비트맵 array 정보를 얻어옴 zxing 자체 class임
                BitMatrix result = qrCodeWriter.encode(params[0],
                        BarcodeFormat.QR_CODE, dWidth, dHeight);
                int width = result.getWidth();
                int height = result.getHeight();

                // Bitmap pixel array
                int[] pixels = new int[width * height];

                // BitMatrix 정보를 바탕으로 bitmap 픽셀 array 에 color 입력
                // All are 0, or black, by default
                for (int y = 0; y < height; y++) {
                    int offset = y * width;
                    for (int x = 0; x < width; x++) {
                        pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
                    }
                }

                // pixel array 크기의 bitmap 생성
                Bitmap bitmap = Bitmap.createBitmap(width, height,
                        Bitmap.Config.ARGB_8888);

                // bitmap에 pixel 정보 입력
                bitmap.setPixels(pixels, 0, width, 0, 0, width, height);

                return bitmap;
            } catch (Exception e) {
                return null;
            }
        }

        @Override
        protected void onPostExecute(Bitmap result) {
            if (result != null && mTagetView != null) {
                // image view 에 QR code 업데이트
                mTagetView.setImageBitmap(result );
                mTagetView.invalidate();
            }
        }
    }   

다음편에 스캔하는 code 설명을 이어가 겠음...





'Android' 카테고리의 다른 글

Sharedpreferences 에 관하여  (0) 2015.04.04
Android QR code scan 부분  (0) 2014.09.21
Android AsyncTask 함정 카드  (1) 2014.08.03
Android Custom Widget 만들기 7편  (0) 2012.04.12
Android Custom Widget 만들기 6편  (0) 2012.04.12
 우리가 Android 상에서 Thread 작업을 쉽게 할 수 있도록 class 되어 있는 아주 유용한 녀석이 있음.
AsyncTask 란 녀석인데 상속받아서 class를 작성하면 손쉽게 뼈대들을 만들어주고 내가 크게 관리할 필요 없이,
UI thread 쪽으로 메세지를 날려주는 아주 좋은 녀석이다.

그리고 class를 실행 시키는 방법이 2가지가 있는데 excute(...) 하고  executeOnExecutor(Executor, ...)  이다.
허니콤 이상 버전 부터는 excute로 동작하는 모든 AsyscTask 는 single thread로 동작한다.
즉 AsyncTask라고 여러개 선언하고 동작 시켜봤자 하나 끝나야 다른게 수행되는 그런 구조다.

반면 executeOnExecutor 는 원래 우리가 예상하고 기대했던 방식대로 동작한다.

여기까진 뭐 그냥 그렇거니 했는데 한 4달전에 개발 했던 application 에서 독특한 문제를 발견 했다.
AsyncTask 원본 class에 가면 이녀석을 생성 할 수 있는 max 값이 정해져 있다.

나는 6개를 생성했었는데 7번째 부터는 동작 자체를 안하는 버그가 있는 것이었다.
그래서 뒤져보니 저게 떡~ 하니 리미트가... 후...
그래서 나는 추천한다 정말 다양한 멀티 쓰레드가 필요하면 그냥 Thread class를 쓰고 UI 동작은 Handler로 처리하라고,
어차피 내부적으로 AsyncTask도 동일하게 동작한다.
Thread 동작을 수행하고 내부적으로 Handler 객체에 post 하는 방식을 취하고 있는 거니까....
 

'Android' 카테고리의 다른 글

Android QR code scan 부분  (0) 2014.09.21
Android QR code  (0) 2014.08.12
Android Custom Widget 만들기 7편  (0) 2012.04.12
Android Custom Widget 만들기 6편  (0) 2012.04.12
Android Custom Widget 만들기 5편  (0) 2012.04.12
 개발자에게 이직이란 피할 수 없는 숙명인건가...
나름 열심히 공부하고 자기 개발 해가면서 코딩을 했건만,
주변 상황들이 내가 프로그래밍에만 몰두하게 놔두질 않는 듯. 에휴...

나는 사람을 처음 대하는데 익숙하지 않은 편이라. 소위 낮가림이 있다고 해야하나?
자신있게 대답은 할 수있지만 그게 내 머리에서 나온 말인지, 내 입에서 나온 말인지 분간을 못할 때가 많고.
나보다 엄청 잘난 개발자들이 많은 것도 사실이고 난 그들 보다 더 뛰어난지 재능이 있는지 역량이 되는지 알수가 없지.
내가 그런걸 생각했다면 5년전 이맘때 그렇게 Android만 열심히 파지 않았을지도...

Android에 대한 오랜 경력이 내 발목을 잡고 있는건 아닌지.
과연 내가 어떤 개발자 인걸까.

이 블로그를 처음 개설할때 그 뿌듯함, 기쁨, 희열, 각오 이런 것들이 지금 내게 가장 필요한 건 아닐까.

Android study 다시 써볼까..

 

'My Stroy' 카테고리의 다른 글

개발자이직에 대해서.  (1) 2014.10.05
피에르 가니에르.  (0) 2014.06.04
합정역 근처 겐츈한 파스타 집?  (0) 2012.10.21
인도 길거리 상인  (0) 2012.06.07
인도 레스토랑 3편  (0) 2012.05.23

+ Recent posts