package example.zxing; import android.content.Intent; import android.hardware.Camera; import android.os.Bundle; import androidx.fragment.app.Fragment; import androidx.appcompat.app.AppCompatActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.Toast; import com.google.zxing.client.android.Intents; import com.google.zxing.integration.android.IntentIntegrator; import com.google.zxing.integration.android.IntentResult; import com.mikepenz.aboutlibraries.LibsBuilder; public class MainActivity extends AppCompatActivity { public final int CUSTOMIZED_REQUEST_CODE = 0x0000ffff; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void scanBarcode(View view) { new IntentIntegrator(this).initiateScan(); } public void scanBarcodeWithCustomizedRequestCode(View view) { new IntentIntegrator(this).setRequestCode(CUSTOMIZED_REQUEST_CODE).initiateScan(); } public void scanBarcodeInverted(View view){ IntentIntegrator integrator = new IntentIntegrator(this); integrator.addExtra(Intents.Scan.SCAN_TYPE, Intents.Scan.INVERTED_SCAN); integrator.initiateScan(); } public void scanMixedBarcodes(View view){ IntentIntegrator integrator = new IntentIntegrator(this); integrator.addExtra(Intents.Scan.SCAN_TYPE, Intents.Scan.MIXED_SCAN); integrator.initiateScan(); } public void scanBarcodeCustomLayout(View view) { IntentIntegrator integrator = new IntentIntegrator(this); integrator.setCaptureActivity(AnyOrientationCaptureActivity.class); integrator.setDesiredBarcodeFormats(IntentIntegrator.ONE_D_CODE_TYPES); integrator.setPrompt("Scan something"); integrator.setOrientationLocked(false); integrator.setBeepEnabled(false); integrator.initiateScan(); } public void scanPDF417(View view) { IntentIntegrator integrator = new IntentIntegrator(this); integrator.setDesiredBarcodeFormats(IntentIntegrator.PDF_417); integrator.setPrompt("Scan something"); integrator.setOrientationLocked(false); integrator.setBeepEnabled(false); integrator.initiateScan(); } public void scanBarcodeFrontCamera(View view) { IntentIntegrator integrator = new IntentIntegrator(this); integrator.setCameraId(Camera.CameraInfo.CAMERA_FACING_FRONT); integrator.initiateScan(); } public void scanContinuous(View view) { Intent intent = new Intent(this, ContinuousCaptureActivity.class); startActivity(intent); } public void scanToolbar(View view) { new IntentIntegrator(this).setCaptureActivity(ToolbarCaptureActivity.class).initiateScan(); } public void scanCustomScanner(View view) { new IntentIntegrator(this).setOrientationLocked(false).setCaptureActivity(CustomScannerActivity.class).initiateScan(); } public void scanMarginScanner(View view) { IntentIntegrator integrator = new IntentIntegrator(this); integrator.setOrientationLocked(false); integrator.setCaptureActivity(SmallCaptureActivity.class); integrator.initiateScan(); } public void scanWithTimeout(View view) { IntentIntegrator integrator = new IntentIntegrator(this); integrator.setTimeout(8000); integrator.initiateScan(); } public void tabs(View view) { Intent intent = new Intent(this, TabbedScanning.class); startActivity(intent); } public void about(View view) { new LibsBuilder().start(this); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode != CUSTOMIZED_REQUEST_CODE && requestCode != IntentIntegrator.REQUEST_CODE) { // This is important, otherwise the result will not be passed to the fragment super.onActivityResult(requestCode, resultCode, data); return; } switch (requestCode) { case CUSTOMIZED_REQUEST_CODE: { Toast.makeText(this, "REQUEST_CODE = " + requestCode, Toast.LENGTH_LONG).show(); break; } default: break; } IntentResult result = IntentIntegrator.parseActivityResult(resultCode, data); if(result.getContents() == null) { Intent originalIntent = result.getOriginalIntent(); if (originalIntent == null) { Log.d("MainActivity", "Cancelled scan"); Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show(); } else if(originalIntent.hasExtra(Intents.Scan.MISSING_CAMERA_PERMISSION)) { Log.d("MainActivity", "Cancelled scan due to missing camera permission"); Toast.makeText(this, "Cancelled due to missing camera permission", Toast.LENGTH_LONG).show(); } } else { Log.d("MainActivity", "Scanned"); Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show(); } } /** * Sample of scanning from a Fragment */ public static class ScanFragment extends Fragment { private String toast; public ScanFragment() { } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); displayToast(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_scan, container, false); Button scan = view.findViewById(R.id.scan_from_fragment); scan.setOnClickListener(v -> scanFromFragment()); return view; } public void scanFromFragment() { IntentIntegrator.forSupportFragment(this).initiateScan(); } private void displayToast() { if(getActivity() != null && toast != null) { Toast.makeText(getActivity(), toast, Toast.LENGTH_LONG).show(); toast = null; } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if(result != null) { if(result.getContents() == null) { toast = "Cancelled from fragment"; } else { toast = "Scanned from fragment: " + result.getContents(); } // At this point we may or may not have a reference to the activity displayToast(); } } } }