🙋‍♀️ Android

[Android] 전화번호 기반 QR 생성 어플 구현

수댕ʕت̫͡ʔ 2023. 5. 1. 01:17

일단 로그인 회원가입 구현에 필요한 전화번호 기반 QR 생성 어플을 구현할 것이다.

사용자가 사용하는 어플에 회원가입을 할때 간편하게 회원가입을 위해서 우선적으로 전화번호만 사용하기로하였다.

그리고 보안을 위해서 전화번호 인증기능도 함께 구현하기로했다.

 

그 중 전화번호 QR생성 어플을 먼저 구현해보자!

 

일단 결과는 아래와 같다.

 

일단 QR 리더기는 파싱하여 정보를 저장해야하기 때문에 

{"userNumber":"01000000000"}

형태가 qr에 저장되게 구현할 것이다. 

내가 참고한 링크는 아래와 같다.

 

https://aries574.tistory.com/197

 

[안드로이드] 나만의 큐알코드(QR CODE) 만드는 방법

이번 시간에는 나만의 큐알코드(QR CODE)를 만드는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 라이브러리(Library) 등록 3. 메인 화면 구성 activity_main.xml 4. 메인 코드 구현 MainActivity.java 1. 실행 화

aries574.tistory.com

 

1. 먼저 build.gradle(Module :app)에 qr기능을 사용하기 위해서 아래코드를 추가한다.

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

2. activity_main.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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/qrcode_editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:padding="12dp" />

    <Button
        android:id="@+id/qrcode_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="20dp"
        android:text="QR CODE" />

    <ImageView
        android:id="@+id/qrcode_imageView"
        android:layout_width="400dp"
        android:layout_height="400dp"
        android:adjustViewBounds="true"
        android:scaleType="fitCenter" />



</LinearLayout>

3. MainActivity.java

package com.example.qr_gen;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.journeyapps.barcodescanner.BarcodeEncoder;

public class MainActivity extends AppCompatActivity {

    EditText qrcode_editText;
    ImageView qrcode_imageView;

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

        qrcode_editText = findViewById(R.id.qrcode_editText);

        qrcode_imageView = findViewById(R.id.qrcode_imageView);

        Button create_qrcode_btn = findViewById(R.id.qrcode_btn);
        create_qrcode_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //입력 데이터 변수에 담기
                String editText = qrcode_editText.getText().toString().trim();
                String userNumber = "{\"userNumber\":\"" + editText + "\"}";

                MultiFormatWriter writer = new MultiFormatWriter();

                try {
                    //1.바코드 생성
                    BitMatrix matrix = writer.encode(userNumber, BarcodeFormat.QR_CODE, 350, 350);

                    //2.바코드엔코더 생성
                    BarcodeEncoder encoder = new BarcodeEncoder();

                    //3. 엔코더로 생성한 코드를 비트맵 객체에 넣기
                    Bitmap bitmap = encoder.createBitmap(matrix);

                    //4. 비트맴을 이미지뷰에 넣기
                    qrcode_imageView.setImageBitmap(bitmap);

                    //5. 입출력 매니저 생성
                    InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

                    //매니저 객체로 키보드 숨기기
                    manager.hideSoftInputFromWindow(qrcode_editText.getApplicationWindowToken(), 0);
                } catch (WriterException e) {
                    e.printStackTrace();
                }
            }

        });
    }
}