# code-scanner **Repository Path**: jre/code-scanner ## Basic Information - **Project Name**: code-scanner - **Description**: No description available - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-09 - **Last Updated**: 2021-12-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ![Code Scanner](https://raw.githubusercontent.com/yuriy-budiyev/code-scanner/master/images/logo_wide_512.png) [![Download](https://api.bintray.com/packages/yuriy-budiyev/maven/code-scanner/images/download.svg)](https://bintray.com/yuriy-budiyev/maven/code-scanner/_latestVersion) [![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-Code%20Scanner-blue.svg?style=flat)](https://android-arsenal.com/details/1/6095) [![API](https://img.shields.io/badge/API-19%2B-blue.svg?style=flat)](https://android-arsenal.com/api?level=19) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/04f32141b2ef480580f709883541b469)](https://www.codacy.com/app/yuriy-budiyev/code-scanner?utm_source=github.com&utm_medium=referral&utm_content=yuriy-budiyev/code-scanner&utm_campaign=Badge_Grade) Code scanner library for [Android](https://developer.android.com), based on [ZXing](https://github.com/zxing/zxing) ### Features * Auto focus and flash light control * Portrait and landscape screen orientations * Back and front facing cameras * Customizable viewfinder * Kotlin friendly * Touch focus ### Supported formats | 1D product | 1D industrial | 2D | ---------- | ------------- | -------------- | UPC-A | Code 39 | QR Code | UPC-E | Code 93 | Data Matrix | EAN-8 | Code 128 | Aztec | EAN-13 | Codabar | PDF 417 | | ITF | MaxiCode | | RSS-14 | | | RSS-Expanded | ### Usage ([sample](https://github.com/yuriy-budiyev/lib-demo-app)) Add dependency: ```gradle dependencies { implementation 'com.budiyev.android:code-scanner:2.1.0' } ``` Add camera permission to AndroidManifest.xml (Don't forget about dynamic permissions on API >= 23): ```xml ``` Define a view in your layout file: ```xml ``` And add following code to your activity: Kotlin ```kotlin class MainActivity : AppCompatActivity() { private lateinit var codeScanner: CodeScanner override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val scannerView = findViewById(R.id.scanner_view) codeScanner = CodeScanner(this, scannerView) // Parameters (default values) codeScanner.camera = CodeScanner.CAMERA_BACK // or CAMERA_FRONT or specific camera id codeScanner.formats = CodeScanner.ALL_FORMATS // list of type BarcodeFormat, // ex. listOf(BarcodeFormat.QR_CODE) codeScanner.autoFocusMode = AutoFocusMode.SAFE // or CONTINUOUS codeScanner.scanMode = ScanMode.SINGLE // or CONTINUOUS or PREVIEW codeScanner.isAutoFocusEnabled = true // Whether to enable auto focus or not codeScanner.isFlashEnabled = false // Whether to enable flash or not // Callbacks codeScanner.decodeCallback = DecodeCallback { runOnUiThread { Toast.makeText(this, "Scan result: ${it.text}", Toast.LENGTH_LONG).show() } } codeScanner.errorCallback = ErrorCallback { // or ErrorCallback.SUPPRESS runOnUiThread { Toast.makeText(this, "Camera initialization error: ${it.message}", Toast.LENGTH_LONG).show() } } scannerView.setOnClickListener { codeScanner.startPreview() } } override fun onResume() { super.onResume() codeScanner.startPreview() } override fun onPause() { codeScanner.releaseResources() super.onPause() } } ``` Java ```java public class MainActivity extends AppCompatActivity { private CodeScanner mCodeScanner; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); CodeScannerView scannerView = findViewById(R.id.scanner_view); mCodeScanner = new CodeScanner(this, scannerView); mCodeScanner.setDecodeCallback(new DecodeCallback() { @Override public void onDecoded(@NonNull final Result result) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, result.getText(), Toast.LENGTH_SHORT).show(); } }); } }); scannerView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mCodeScanner.startPreview(); } }); } @Override protected void onResume() { super.onResume(); mCodeScanner.startPreview(); } @Override protected void onPause() { mCodeScanner.releaseResources(); super.onPause(); } } ``` or fragment: Kotlin ```kotlin class MainFragment : Fragment() { private lateinit var codeScanner: CodeScanner override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater.inflate(R.layout.fragment_main, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { val scannerView = view.findViewById(R.id.scanner_view) val activity = requireActivity() codeScanner = CodeScanner(activity, scannerView) codeScanner.decodeCallback = DecodeCallback { activity.runOnUiThread { Toast.makeText(activity, it.text, Toast.LENGTH_LONG).show() } } scannerView.setOnClickListener { codeScanner.startPreview() } } override fun onResume() { super.onResume() codeScanner.startPreview() } override fun onPause() { codeScanner.releaseResources() super.onPause() } } ``` Java ```java public class MainFragment extends Fragment { private CodeScanner mCodeScanner; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { final Activity activity = getActivity(); View root = inflater.inflate(R.layout.fragment_main, container, false); CodeScannerView scannerView = root.findViewById(R.id.scanner_view); mCodeScanner = new CodeScanner(activity, scannerView); mCodeScanner.setDecodeCallback(new DecodeCallback() { @Override public void onDecoded(@NonNull final Result result) { activity.runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(activity, result.getText(), Toast.LENGTH_SHORT).show(); } }); } }); scannerView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mCodeScanner.startPreview(); } }); return root; } @Override public void onResume() { super.onResume(); mCodeScanner.startPreview(); } @Override public void onPause() { mCodeScanner.releaseResources(); super.onPause(); } } ``` ### Preview ![Preview screenshot](https://raw.githubusercontent.com/yuriy-budiyev/code-scanner/master/images/code_scanner_preview.png)