Я хочу сканировать QR-код фрагментом.
Но onActivityResult не вызывает.
Фрагмент.java
@Override
public View onCreateView(LayoutInflater inflater ,ViewGroup container ,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate( R.layout.fragment_offer ,container ,false );
scanOffer = view.findViewById( R.id.scanOffer );
scanOffer.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
scanBarcode();
}
} );
return view;
}
public void scanBarcode() {
/** This method will listen the button clicked passed form the fragment **/
Intent intent = new Intent(getContext(),CaptureActivity.class);
intent.setAction("com.google.zxing.client.android.SCAN");
intent.putExtra("SAVE_HISTORY", false);
startActivityForResult(intent, 0);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 0) {
if (resultCode == Activity.RESULT_OK) {
uniqueCode = data.getStringExtra("SCAN_RESULT");
Log.d(TAG, "contents: " + uniqueCode);
Toast.makeText( getContext() ,uniqueCode ,Toast.LENGTH_SHORT ).show();
// callAddStoreContestParticipantService();
} else if (resultCode == Activity.RESULT_CANCELED) {
Log.d(TAG, "RESULT_CANCELED");
}
}
}
Пожалуйста помогите.
onActivityResult() не звонит
CaptureActivity.класс открывает Qr после сканирования onActivityResult() не вызывает
Нет, это не моя деятельность. Я использую реализацию 'com.daimajia.slider:library:1.1.5@aar' для сканирования QR-кода.
com.daimajia.slider:library:1.1.5@aar для сканирования qr-кода?
Пожалуйста, подтвердите получение обратного вызова в методе onActivityResult() вашего фрагмента и отследите ответ, чтобы вы были уверены, что входите в обратный вызов Activity, но не в вызов Fragment.
@UnnatiPatadia, пожалуйста, попробуйте мое решение
Убедитесь, что вы использовали setResult(0) из CaptureActivity, чтобы получить результат на Fragment.java
надо звонить getActivity().startActivityForResult(intent, 0);
в вашем фрагменте
и в вашей деятельности вы в onActivityResultMethod() вы должны вызвать yourfragmnt.onActivityResult()
Нет необходимости делать это.
Как уже упоминалось, вам нужно вызвать getActivity().startActivityForResult(intent, 0); правильно, но позже не требуется. Скорее это может быть обходной путь для вызова onActivityResult() фрагмента.
yourfragmnt.onActivityResult() неправильный способ (он тесно связан и не использует цель startActivityForResult()), вместо этого вам просто нужно использовать setResult()javatpoint.com/android-startactivityforresult-пример для полного примера
Попробуйте ниже код для сканирования штрих-кода, а также переопределите результат активности в родительской активности
private static final int BARCODE_REQUEST = 312;
private void startBarcode() {
//IntentIntegrator.forFragment(getActivity().initiateScan()); // `this` is the current Fragment
IntentIntegrator integrator = new IntentIntegrator(getActivity()) {
@Override
protected void startActivityForResult(Intent intent, int code) {
Fragment.this.startActivityForResult(intent, BARCODE_REQUEST); // REQUEST_CODE override
}
};
//IntentIntegrator integrator = new IntentIntegrator(getActivity());
//IntentIntegrator.forSupportFragment(this);
integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
integrator.setPrompt("Scan a barcode");
integrator.setCameraId(0); // Use a specific camera of the device
integrator.setBeepEnabled(true);
integrator.setBarcodeImageEnabled(true);
integrator.setOrientationLocked(false);
integrator.setTimeout(15000);
integrator.initiateScan();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case BARCODE_REQUEST:
IntentResult Result = IntentIntegrator.parseActivityResult(IntentIntegrator.REQUEST_CODE, resultCode, data);
if (Result != null) {
if (Result.getContents() == null) {
Timber.i("cancelled scan");
showSnackbar("cancelled scan", true);
} else {
Timber.i("Scanned");
showSnackbar("Code scan successfully", false);
try {
long id = Long.parseLong(Result.getContents());
// getFood(id);
searchBarcode(Result.getContents());
} catch (Exception e) {
e.printStackTrace();
}
// searchBarcode(Result.getContents());
//getFood(Long.valueOf(mItem.get(position - 1).getID()));
}
} else {
showSnackbar("Barcode not scanned", true);
Timber.i("Barcode Result is NULL");
super.onActivityResult(requestCode, resultCode, data);
}
break;
}
}
Вы можете получить ссылку из этого примера: Сканер штрих-кода