본문 바로가기

모바일 앱 프로그래밍(안드로이드 IOS통합) c# maui

모바일 통합 앱 코딩 c# maui qr코드/바코드 만들기

이번장에서는 c# maui를 이용해서 qr코드를 생성하는걸 해볼것이다.

우선 c# maui 사용하기 위해서는 visual studio가 필요한데 모르시는분들은 앞장을 참고하시길.

 

https://easytocoding.tistory.com/17

 

모바일 앱에서 텔레그램 메세지 보내기 c# Maui

이번장에서 c# maui를 통해 안드로이드 IOS 맥OS 통합으로 된 텔레그램 메세지 보내는 프로그램을 한번에 만들어 보도록 하겠다. c# maui 를 애플의 맥 으로 진행할것인데 구글에서 visual studio for mac 20

easytocoding.tistory.com

우선 QR코드 같은 바코드를 사용하기 위해서 zxing.maui 라이브러리를 사용할 것입니다.

 

https://github.com/Redth/ZXing.Net.Maui

 

GitHub - Redth/ZXing.Net.Maui: Barcode Scanning for MAUI?

Barcode Scanning for MAUI? Contribute to Redth/ZXing.Net.Maui development by creating an account on GitHub.

github.com

redth및 관계자 분들에게 감사한 마음을 가지며,

 

누겟 패키지 관리자에서 3개의 패키지를 설치해야됩니다.

깃허브에서 보면 맨위에 하나만 설치하면 된다고 하지만,

 

예전버전 설명인거 같습니다. 0.3.0 기준 3개를 다 설치해야 됩니다.

 

그 다음. 바코드 리딩을 하기 위해서는 메인코드에서가 아닌, MauiProgram.cs에서 라이브러리를 Import하고

using ZXing.Net.Maui.Controls;

위에 삽입할 부분에 있는 

.UseBarcodeReader()

구문을 추가해줍니다.

 

그 다음에 UI에서 사용하기 위해서 xaml에 라이브러리를 import하고

xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;assembly=ZXing.Net.MAUI.Controls"

생성된 바코드를 보여주려면, view를 다음과 같이 추가합니다.

 <zxing:BarcodeGeneratorView x:Name="generateBarcode" Grid.Row="1" ForegroundColor="Black" Format="QrCode"/>

중요한것은 Format파라미터 인데 어떤 바코드를 할것인지 결정합니다. 자신에 맞게 Format을 지정해 줍니다.

 

바코드를 카메라로 읽는 것을 하려면, 우선 카메라 사용할수있게 세팅부터해야되는데,

 

카메라 설정을 위해 안드로이드는 플랫폼 안드로이드에서

AndroidManifest.xml

파일을 수정해주는데 visual studio code같은 편집기로 수정하면 좋다.

<uses-permission android:name="android.permission.CAMERA" />

 

IOS 플랫폼은

info.plist

파일을 수정하는데

<key>NSCameraUsageDescription</key>
<string>This app uses barcode scanning to...</string>

위와 같이 수정하면 된다.

 

그다음에 카메라 뷰를 xaml에 마찬가지로 추가해주면 된다.

<zxing:CameraBarcodeReaderView x:Name="cameraBarcodeReaderView" BarcodesDetected="BarcodesDetected" Grid.Row="1"/>

 

그 다음에 카메라 기본세팅을 해주고

cameraBarcodeReaderView.Options = new BarcodeReaderOptions
        {
            Formats = BarcodeFormats.All,
            AutoRotate = true,
            Multiple = true
        };
cameraBarcodeReaderView.IsTorchOn = !cameraBarcodeReaderView.IsTorchOn;
cameraBarcodeReaderView.CameraLocation = cameraBarcodeReaderView.CameraLocation == CameraLocation.Rear ? CameraLocation.Front : CameraLocation.Rear;

 

읽어주는 이벤트 해주면 읽어주는건 끝.

 protected void BarcodesDetected(object sender, BarcodeDetectionEventArgs e)
    {
        foreach (var barcode in e.Results)
            Console.WriteLine($"Barcodes: {barcode.Format} -> {barcode.Value}");
    }

 

바코드를 생성하려면 아까 BarcodeGeneratorView에 그냥 value값만 넣으면 생성된다.

 Dispatcher.Dispatch(() =>
        {
  
            generateBarcode.Value = "생성할 바코드내용";
        });

 

 

만일 이 바코드 내용을 저장하고 싶으면, 저장하게 비동기식으로 만들면 된다.

 async void ButtonSave_Clicked(System.Object sender, System.EventArgs e)
    {
        IScreenshotResult screen = await generateBarcode.CaptureAsync();
        Stream stream = await screen.OpenReadAsync();

        SaveStreamAsFile(stream);
    }
    private static async void SaveStreamAsFile(Stream inputStream)
    {
        // Save the image file.
        string cFileName = Path.Combine(FileSystem.CacheDirectory, "BarcodeGenerator.png");

        using (FileStream outputFileStream = new FileStream(cFileName, FileMode.Create))
        {
            inputStream.CopyTo(outputFileStream);
        }

        inputStream.Dispose();

        // Open the share interface to share the file.
        await OpenShareInterface(cFileName);
    }
    public static async Task OpenShareInterface(string cFile)
    {
        await Share.Default.RequestAsync(new ShareFileRequest
        {
            Title = "Barcode Generator",
            File = new ShareFile(cFile)
        });
    }

 

 

반응형