프로그래밍/Android

안드로이드 스튜디오 QR코드 (스캐닝에 글씨or이미지 넣기)

Beginner:) 2019. 4. 17.
320x100

안녕하세요 지난글에 이어 스캐닝중인 카메라에 글씨나 이미지를 넣어보겠습니다!

 

xml파일은 필요없고 

java 페이지만 생성하면 됩니다.

 

지난글에서는 빈 액티비티를 생성하여 자동으로 AndroidMenifest.xml 파일에 추가되었지만

자바 파일만 생성하면 AndroidMenifest.xml 파일에 추가해야겠죠?

<activity android:name=".클래스이름"/>

한줄 추가하시면 됩니다!

 

전 CaptureForm.java로 생성했습니다.

 

CaptureForm.java를 구현하기전에 ScanQR.java 클래스에 코드한줄 추가하겠습니다.

 

 

IntentIntegrator 객체 생성 뒤,

qrScan.initiateScan(); 전에 

 

qrScan.setCaptureActivity(CaptureForm.class);

 

이것한줄 생성하시면 되겠습니다. 생성한 자바파일 이름을 넣어주시면 되겠네요.

(아래 전체코드중 20번줄입니다.)

 

qrScan.java 전체코드입니다.

 

package com.example.myqrcode;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

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

public class ScanQR extends AppCompatActivity {
    private IntentIntegrator qrScan;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scan_qr);

        qrScan = new IntentIntegrator(this);

        qrScan.setCaptureActivity(CaptureForm.class);
        qrScan.setOrientationLocked(false); // default가 세로모드인데 휴대폰 방향에 따라 가로, 세로로 자동 변경됩니다.
        qrScan.setPrompt("Sample Text!");
        qrScan.initiateScan();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if(result != null) {
            if(result.getContents() == null) {
                Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
                // todo
            } else {
                Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
                // todo
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
}

 

 

이후 CaptureForm.java에서 setContentView(R.id.~~~); 가 있다면 를 지워주시고 

CaptureActivity를 상속받습니다.

 

이 클래스 역시 zxing에서 만든 클래스입니다.

 

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

 

를 오버라이드 해주시고!

 

원하는 레이아웃의 LayoutParams 객체를 생성해줍니다.

ex)

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
  ViewGroup.LayoutParams.MATCH_PARENT,
  ViewGroup.LayoutParams.MATCH_PARENT
);

 

다음으론 원하는 View를 생성해서 addContentView를 해주면 됩니다.

 

여기서는 TextView와 ImageView 두가지를 해보겠습니다.

CaptureForm.java 예시입니다.

 

package com.example.myqrcode;

import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.journeyapps.barcodescanner.CaptureActivity;

public class CaptureForm extends CaptureActivity {

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

        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
        );

        /* TextVeiw를 설정하고 마지막엔 this.addContentView ! */
        TextView textView = new TextView(this);
        textView.setLayoutParams(new LinearLayout.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT));
        textView.setTextColor(Color.parseColor("#ABCDEF"));
        textView.setText("바코드 / QR 코드 입력화면");
        textView.setGravity(Gravity.CENTER_HORIZONTAL);


        /* imagaeVeiw를 설정하고 마지막엔 this.addContentView ! */
        ImageView imageView = new ImageView(this);
        imageView.setLayoutParams(new LinearLayout.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT));
        imageView.setImageDrawable(getResources().getDrawable(R.drawable.sample));

        /* this.addContentView ! */
        this.addContentView(textView, params);
        this.addContentView(imageView,params);
    }
}

 

 

 

 

결과모습입니다.

"바코드/QR코드 입력화면" 이라는 문구와

카드문양의 벡터이미지까지 나왔네요 ^^

 

추가적으로 zxing을 사용하려면 

상업적 이용은 가능하나

언급을 해줘야하고

help 단추에 뭐가 있어야한다나 ...

좀 복잡하더라구요 (영어를 잘 몰라서;;)

 

https://stackoverflow.com/questions/10293870/could-i-use-zxing-for-business-purpose

 

Could I use Zxing for business purpose?

I got a app using zxing as core, I want to know, If I plus other functions to my app, Could I charge fee from users for the part I added. Thank you all guys.

stackoverflow.com

아래 내용도 봐주시고 상황에 맞게 써주시기 바랍니다 ^^

 

 

2019/04/24 - [프로그래밍/안드로이드] - 안드로이드 스튜디오 애뮬레이터 웹카메라 연동

 

안드로이드 스튜디오 애뮬레이터 웹카메라 연동

안녕하세요 저는 어플 테스트를 휴대폰으로 하는데 언제부터인가 연결이 안되더라구요 고생고생했는데 알고보니 휴대폰문제였네요... 휴대폰 사기엔 뭐해서... 웹카메라사서 애뮬레이터랑 연

park-duck.tistory.com

 

반응형

댓글