본문 바로가기
안드로이드 자바

[JAVA][Android] QR코드 스캐너 만들기

by teamnova 2023. 11. 20.
728x90

안녕하세요. 오늘은 안드로이드로 QR코드 스캐너를 만들어 보겠습니다.

 

먼저 build.gradle(:app)파일에 있는 dependencies에 아래를 추가합니다.

implementation 'com.journeyapps:zxing-android-embedded:4.3.0'

그리고 메인액티비티 말고 새로운 빈 액티비티를 만들어주세요.

저는 ScanActivity의 이름으로 만들겠습니다. 그리고 나서 아래 코드를 입력합니다.

public class ScanActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scan);

        IntentIntegrator integrator = new IntentIntegrator(this);
        integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE);  // 바코드 형식 설정
        integrator.setPrompt("Scan a barcode or QR code");  // 스캔 화면에 표시되는 메시지 설정
        integrator.setCameraId(0);  // 후면 카메라 사용
        integrator.setBeepEnabled(false);  // 스캔 소리 사용 여부
        integrator.setOrientationLocked(false);

        integrator.initiateScan();  // 스캔 시작
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if (result != null) {
            if (result.getContents() == null) {
                setResult(Activity.RESULT_CANCELED);
            } else {
                // 스캔된 코드를 처리합니다.
                String scannedCode = result.getContents();
                Intent intent = new Intent();
                intent.putExtra("scannedCode", scannedCode);
                setResult(Activity.RESULT_OK, intent);
            }
            finish();
        }
    }
}

그리고 메인액티비티 xml 파일입니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical"
    android:gravity="center">
    <Button
        android:layout_width="200dp"
        android:layout_height="40dp"
        android:text="qr인식"
        android:id="@+id/scan_qr_btn"/>


</LinearLayout>

그리고 자바 파일입니다.

public class MainActivity extends AppCompatActivity {
    Button scan_qr_btn;


    Context context;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        scan_qr_btn = findViewById(R.id.scan_qr_btn);

        context = this;

        scan_qr_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, ScanActivity.class);
                startActivityForResult(intent, 0);
            }
        });

    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 0) {
            if (resultCode == Activity.RESULT_OK) {
                String scannedCode = data.getStringExtra("scannedCode");
                Toast.makeText(context,scannedCode,Toast.LENGTH_SHORT).show();
            } else if (resultCode == Activity.RESULT_CANCELED) {
                Toast.makeText(this,"스캔을 취소하였습니다.",Toast.LENGTH_SHORT).show();
            }
        }
    }
}

이렇게 하면 Toast메시지로 스캔한 정보를 띄워줄겁니다.