Skip to content

yuriy-budiyev/code-scanner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Code Scanner

Release Android Arsenal API

Code scanner library for Android, based on 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)

Step 1. Add it in your root build.gradle at the end of repositories:

allprojects { repositories { maven { url 'https://jitpack.io' } } }

or in settings.gradle file:

dependencyResolutionManagement { repositories { maven { url 'https://jitpack.io' } } }

Step 2. Add dependency:

dependencies { implementation 'com.github.yuriy-budiyev:code-scanner:2.3.0' }

Add camera permission and hardware feature to AndroidManifest.xml (Don't forget about dynamic permissions on API >= 23):

<uses-permission android:name="android.permission.CAMERA"/> <uses-feature android:name="android.hardware.camera" android:required="false"/>

Define a view in your layout file:

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <com.budiyev.android.codescanner.CodeScannerView android:id="@+id/scanner_view" android:layout_width="match_parent" android:layout_height="match_parent" app:autoFocusButtonColor="@android:color/white" app:autoFocusButtonVisible="true" app:flashButtonColor="@android:color/white" app:flashButtonVisible="true" app:frameColor="@android:color/white" app:frameCornersSize="50dp" app:frameCornersRadius="0dp" app:frameAspectRatioWidth="1" app:frameAspectRatioHeight="1" app:frameSize="0.75" app:frameThickness="2dp" app:frameVerticalBias="0.5" app:maskColor="#77000000"/> </FrameLayout>

And add following code to your activity:

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<CodeScannerView>(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

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

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<CodeScannerView>(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

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

Packages

No packages published

Contributors 10

Languages