QR Code를 스캔하는 안드로이드 앱을 자바 코드로 구현해보겠습니다.
1단계: build.gradle에 종속성(dependency) 추가하기
앱의 build.gradle 파일에 다음 종속성을 추가합니다:
implementation 'com.google.zxing:core:3.4.1'
implementation 'com.journeyapps:zxing-android-embedded:4.2.0'
2단계: 안드로이드 매니페스트.xml에 권한 추가하기
앱의 AndroidManifest.xml 파일에 다음 권한을 추가합니다:
<uses-permission android:name="android.permission.CAMERA" />
3단계: QR코드 스캔을 위한 UI 만들기
QR 코드를 스캔할 활동에 대한 레이아웃 파일을 만듭니다.
바코드를 스캔하기 위한 DecoratedBarcodeView를 추가합니다:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.journeyapps.barcodescanner.DecoratedBarcodeView
android:id="@+id/barcodeView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
4단계: QR코드 스캔 로직 구현하기
활동의 Java 파일에서 QR 코드를 스캔하는 로직을 구현해야 합니다. 다음은 예제입니다:
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.ResultPoint;
import com.journeyapps.barcodescanner.BarcodeCallback;
import com.journeyapps.barcodescanner.BarcodeResult;
import com.journeyapps.barcodescanner.DefaultDecoderFactory;
import com.journeyapps.barcodescanner.DecoratedBarcodeView;
import com.journeyapps.barcodescanner.camera.CameraSettings;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private static final int CAMERA_REQUEST_CODE = 100;
private boolean hasCameraPermission = false;
private DecoratedBarcodeView barcodeView;
private BarcodeCallback barcodeCallback = new BarcodeCallback() {
@Override
public void barcodeResult(BarcodeResult result) {
Toast.makeText(MainActivity.this, result.getText(), Toast.LENGTH_SHORT).show();
}
@Override
public void possibleResultPoints(List<ResultPoint> resultPoints) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
barcodeView = findViewById(R.id.barcodeView);
barcodeView.decodeContinuous(barcodeCallback);
Collection<BarcodeFormat> formats = Arrays.asList(BarcodeFormat.QR_CODE);
barcodeView.setDecoderFactory(new DefaultDecoderFactory(formats));
barcodeView.setStatusText("");
CameraSettings settings = barcodeView.getBarcodeView().getCameraSettings();
settings.setFocusMode(CameraSettings.FocusMode.AUTO);
hasCameraPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED;
if (!hasCameraPermission) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE);
}
}
@Override
public void onResume() {
super.onResume();
if (hasCameraPermission) {
barcodeView.resume();
}
}
@Override
public void onPause() {
super.onPause();
if (hasCameraPermission) {
barcodeView.pause();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == CAMERA_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
hasCameraPermission = true;
barcodeView.resume();
}
}
}
}
이 코드에서는 카메라 미리보기를 표시하고 QR 코드를 스캔하기 위해 ZXing 라이브러리의 `DecoratedBarcodeView`를 사용하고 있습니다.
또한 스캔 과정의 결과를 처리하기 위해 `BarcodeCallback`을 구현하고 있습니다.
카메라 권한을 요청하고 사용자의 응답을 처리하기 위해 `onRequestPermissionsResult()` 메서드를 사용하고 있습니다.
5단계: QR코드 스캔 앱 테스트하기
이제 앱을 빌드하고 실행하여 QR코드 스캔 기능을 테스트할 수 있습니다.
앱을 실행시키면 QR 코드 스캔하는 화면이 나오며, 앱에 스캔한 QR 코드의 콘텐츠가 포함된 토스트 메시지가 표시됩니다.
예제로 구현된 QR 코드 스캔 기능을 활용해서 다양한 앱을 만드실 수 있을 겁니다.
관련 구현된 내용은 아래 깃허브에 있습니다.
'Android' 카테고리의 다른 글
XML과 view를 통한 사용자 인터페이스 (0) | 2023.02.25 |
---|---|
안드로이드 개발을 위한 자바 기본 개념 (0) | 2023.02.23 |
안드로이드 프로젝트 구조와 컴포넌트 (0) | 2023.02.21 |
안드로이드 스튜디오 설정 및 새 프로젝트 만들기 (0) | 2023.02.15 |
안드로이드 스튜디오 핸드폰(스마트폰) 인식 방법 (0) | 2021.03.06 |
댓글