Как сделать переход по QR-cod в нужное место в приложении?

Рейтинг: 0Ответов: 0Опубликовано: 14.05.2023

Я создал вкладку QR-cod, есть кнопка, которая открывает сканер, так же в этом фрагменте генерируется qr-cod (который почему то сразу пропадает, но просканировать можно успеть), мне нужно по сканируемому QR-cod перейти на другую активность в приложение, и открыть нужную информацию Вот код QR-cod

public class QRcod extends Fragment {

private static final int REQUEST_CODE_SCAN = 0;
private DatabaseReference mDatabase;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.fragment_q_rcod, container, false);
    ImageView qrcodeImageView = v.findViewById(R.id.qrcode_imageview);

    // Генерируем QR-код
    String imageId = "414";
    String qrData = "Honor/" + imageId;
    Bitmap qrBitmap = generateQRCode(qrData);
    qrcodeImageView.setImageBitmap(qrBitmap);

    // Получаем ссылку на базу данных Firebase
    mDatabase = FirebaseDatabase.getInstance().getReference().child("Honor").child("414");

    // Добавляем слушатель для получения данных из базы данных Firebase
    mDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            // Получаем данные из базы данных Firebase и отображаем их на экране
            String imageUrl = dataSnapshot.child("imageUrl").getValue(String.class);
            Glide.with(getActivity())
                    .load(imageUrl)
                    .into( qrcodeImageView);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            // Обрабатываем ошибку
        }
    });

    // Находим кнопку сканирования QR-кода
    Button scanButton = v.findViewById(R.id.scan_button);
    scanButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            scanQRCode();

        }
    });

    return v;
}

private void scanQRCode() {
    // Запускаем сканирование QR-кода с помощью библиотеки zxing
    IntentIntegrator integrator = new IntentIntegrator(getActivity());
    integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE);
    integrator.setPrompt("Scan QR Code");
    integrator.setCameraId(0);
    integrator.setBeepEnabled(false);
    integrator.initiateScan();

}

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

    // Обрабатываем результат сканирования QR-кода
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
    if (result != null) {
        if (result.getContents() != null) {
            // Извлекаем идентификатор из QR-кода
            String imageId = result.getContents();

            // Получаем ссылку на базу данных Firebase
            mDatabase = FirebaseDatabase.getInstance().getReference().child("Honor").child(imageId);

            // Открываем активити HonorsActivity с передачей ссылки на базу данных
            Intent intent = new Intent(getActivity(), HonorsActivity.class);
            intent.putExtra("Honor", mDatabase.toString());
            startActivity(intent);
        }
    }
}

private Bitmap generateQRCode(String data) {
    BitMatrix bitMatrix;
    try {
        bitMatrix = new MultiFormatWriter().encode(data, BarcodeFormat.QR_CODE, 500, 500, null);
    } catch (WriterException e) {
        e.printStackTrace();
        return null;
    }
    int width = bitMatrix.getWidth();
    int height = bitMatrix.getHeight();
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
    for (int x = 0; x < width; x++) {
        for (int y = 0; y < height; y++) {
            bitmap.setPixel(x, y, bitMatrix.get(x, y) ? Color.BLACK : Color.WHITE);
        }
    }

    return bitmap;
}
}

А в эту активность мне нужно попасть после сканирования QR

public class HonorsActivity extends AppCompatActivity {
    private RecyclerView recview;
    myadapter1 adapter2;
    private DatabaseReference mDatabase;
    private ImageView imageView;
    private DatabaseReference databaseReference;
    private String scannedData;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_honors);
        scannedData = getIntent().getStringExtra("Honor");

        back();
        recview = (RecyclerView) findViewById(R.id.recview);
        recview.setLayoutManager(new LinearLayoutManager(this));

        FirebaseRecyclerOptions<model> options =
                new FirebaseRecyclerOptions.Builder<model>()
                        .setQuery(FirebaseDatabase.getInstance().getReference().child("Honor"), model.class)
                        .build();

        adapter2 = new myadapter1(options);
        recview.setAdapter(adapter2);
    }

    @Override
    protected void onStart() {
        super.onStart();
        adapter2.startListening();
    }

    private void back() {
        ImageButton imageButton = (ImageButton) findViewById(R.id.imageButton);
        imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
    }
}

Как тут поступить? и вообще не понимаю, как сгенерировать просто qr-код отдельного места, и вывести этот код за пределы приложения

Ответы

Ответов пока нет.