Как сделать переход по QR-cod в нужное место в приложении?
Я создал вкладку 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-код отдельного места, и вывести этот код за пределы приложения
Источник: Stack Overflow на русском