마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드스튜디오와 바코드 스캐너 연동

0 추천

현재 안드로이드 스튜디오로 qr출퇴근을 구현하는중인데
qr코드에 id값을 넣고 생성하는것까진 완료했지만
qr코드가 바코드 스캐너에 찍혔을때, 어떻게해야 id값을 다시 서버로 전달할지 모르겠습니다.
안드로이드 스튜디오와 바코드 스캐너를 연동해서 바코드 스캐너에 qr코드가 찍혔을때, id값을 서버로 다시 전달하는것이 목적입니다.
어떻게해야 구현될지 답변 부탁드립니다...ㅜㅜ

 

 

혹시몰라서 코드또한 같이 첨부합니다.

이 코드는 서버로부터 id값을 받아서 qr코드에 id값을 넣고 생성하는 코드입니다.

바코드 스캐너는 usb형식의 바코드 스캐너(잘콤 제코드)를 사용하려고 합니다.
qr코드를 스캐너에 찍으면 id값이 텍스트로 커서를 잡은 입력도구에 찍히긴합니다.

너무 두서없이 말했는데 정말 막막합니다ㅠㅠ

도움주시면 감사하겠습니다.
 

package com.example.kick_login;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.inputmethod.InputMethod;
import android.view.inputmethod.InputMethodManager;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;

import com.example.connection.HttpConnection;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.journeyapps.barcodescanner.BarcodeEncoder;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.Objects;

public class CreateQRActivity extends AppCompatActivity {
    private ActivityResultLauncher<Intent> qrScannerLauncher;
    TextView dummy_id;
    String id;

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

        // dummy_id 초기화
        dummy_id = findViewById(R.id.dummy_id);

        SharedPreferences sharedPreferences = getSharedPreferences("KickForward", MODE_PRIVATE);
        String data = sharedPreferences.getString("data", "");
        JSONObject qrInfoJson = new JSONObject();
        try {
            JSONObject tokenJsonObject = new JSONObject(data);
            String userId = tokenJsonObject.optString("id", "");
            String userPass = tokenJsonObject.optString("pw", "");
            qrInfoJson.put("id", userId);
            qrInfoJson.put("pw", userPass);
            String QRInfoData = qrInfoJson.toString();

            String path = getResources().getString(R.string.server_url) + "/memberInfo";
            HttpConnection httpConnection = new HttpConnection(new HttpConnection.HttpConnectionListener() {
                @Override
                public void onResult(String data) {
                    try {
                        JSONObject tokenJsonObject = new JSONObject(data);
                        id = tokenJsonObject.optString("id", "");

                        // dummy_id 설정
                        dummy_id.setText(id);

                        // idText 값 가져오기
                        String idText = dummy_id.getText().toString().trim();

                        // QR 코드 생성
                        MultiFormatWriter writer = new MultiFormatWriter();
                        try {
                            BitMatrix bitMatrix = writer.encode(idText, BarcodeFormat.QR_CODE, 350, 350);
                            BarcodeEncoder encoder = new BarcodeEncoder();
                            Bitmap bitmap = encoder.createBitmap(bitMatrix);
                            ImageView imageViewQrCode = findViewById(R.id.imageViewQrCode);
                            imageViewQrCode.setImageBitmap(bitmap); // 이미지뷰에 직접 설정
                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                        Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                }
            });
            httpConnection.execute(path, QRInfoData);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

 

안드로이드코린이 (140 포인트) 님이 2023년 10월 6일 질문

1개의 답변

0 추천

질문내용으로 봐서는 EditText에 스캐닝한 값을 읽어들이시는 것 같네요. 아래처럼 레이아웃에 EditText, Button을 위치시키시고 버튼 클릭시 서버로 스캐닝한 값을 서버로 보내시면 됩니다.

public class MainActivity extends AppCompatActivity {

    private Button submitButton;
    private EditText qrCodeEdit;

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

        submitButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String userId = qrCodeEdit.getText().toString();
                submitUserId(userId);
            }
        });
    }


   private void submitUserId(String userId) {
         if (userId.isEmpty()) {
               // 에러 출력
               return;
         }

         // 서버로 ID 전송
   }
}



서버와의 통신은 여기서 한꺼번에 다루기에는 분량이 너무 많으므로 별도의 튜토리얼을 참고하시기 바랍닝다.아래 라이브러리가 대부분 사용됩니다. 그리고 해당 튜토리얼들은 인터넷 상에 너무 많으니 검색해 보시기 바랍니다. Github에 소스도 너무 많이 존재하구요.

_ https://google.github.io/volley/
- https://square.github.io/retrofit/

spark (227,530 포인트) 님이 2023년 10월 7일 답변
spark님이 2023년 10월 7일 수정
...