44[ ![ Android Arsenal] ( https://img.shields.io/badge/Android%20Arsenal-Code%20Scanner-blue.svg?style=flat )] ( https://android-arsenal.com/details/1/6095 )
55[ ![ API] ( https://img.shields.io/badge/API-19%2B-blue.svg?style=flat )] ( https://android-arsenal.com/api?level=19 )
66
7- Code scanner library for [ Android] ( https://developer.android.com ) , based on [ ZXing] ( https://github.com/zxing/zxing )
7+ Code scanner library for [ Android] ( https://developer.android.com ) , based
8+ on [ ZXing] ( https://github.com/zxing/zxing )
89
910### Features
11+
1012* Auto focus and flash light control
1113* Portrait and landscape screen orientations
1214* Back and front facing cameras
@@ -15,6 +17,7 @@ Code scanner library for [Android](https://developer.android.com), based on [ZXi
1517* Touch focus
1618
1719### Supported formats
20+
1821| 1D product | 1D industrial | 2D
1922| ---------- | ------------- | --------------
2023| UPC-A | Code 39 | QR Code
@@ -59,33 +62,29 @@ dependencies {
5962}
6063```
6164
62- Add camera permission and hardware feature to AndroidManifest.xml (Don't forget about dynamic permissions on API >= 23):
65+ Add camera permission and hardware feature to AndroidManifest.xml (Don't forget about dynamic
66+ permissions on API >= 23):
6367
6468``` xml
69+
6570<uses-permission android : name =" android.permission.CAMERA" />
6671
67- <uses-feature
68- android : name =" android.hardware.camera"
69- android : required =" false" />
72+ <uses-feature android : name =" android.hardware.camera" android : required =" false" />
7073```
7174
7275Define a view in your layout file:
7376
7477``` xml
7578<?xml version =" 1.0" encoding =" utf-8" ?>
76- <FrameLayout
77- xmlns : android =" http://schemas.android.com/apk/res/android"
78- android : layout_width =" match_parent"
79- android : layout_height =" match_parent" >
80-
81- <com .budiyev.android.codescanner.CodeScannerView
82- android : id =" @+id/scanner_view"
83- android : layout_width =" match_parent"
84- android : layout_height =" match_parent" />
79+ <FrameLayout xmlns : android =" http://schemas.android.com/apk/res/android"
80+ android : layout_width =" match_parent" android : layout_height =" match_parent" >
81+
82+ <com .budiyev.android.codescanner.CodeScannerView android : id =" @+id/scanner_view"
83+ android : layout_width =" match_parent" android : layout_height =" match_parent" />
8584</FrameLayout >
8685```
8786
88- You can use XML attributes to set view parameters:
87+ You can use XML attributes to set CodeScannerView parameters:
8988
9089```
9190maskColor
@@ -118,39 +117,50 @@ flashButtonPosition
118117And add following code to your activity:
119118
120119Kotlin
120+
121121``` kotlin
122- class MainActivity : AppCompatActivity () {
122+ class MainActivity : AppCompatActivity () {
123123 private lateinit var codeScanner: CodeScanner
124124
125125 override fun onCreate (savedInstanceState : Bundle ? ) {
126126 super .onCreate(savedInstanceState)
127127 setContentView(R .layout.activity_main)
128128 val scannerView = findViewById<CodeScannerView >(R .id.scanner_view)
129-
130- codeScanner = CodeScanner (this , scannerView)
131-
129+
130+ codeScanner = CodeScanner (
131+ this ,
132+ scannerView
133+ )
134+
132135 // Parameters (default values)
133136 codeScanner.camera = CodeScanner .CAMERA_BACK // or CAMERA_FRONT or specific camera id
134137 codeScanner.formats = CodeScanner .ALL_FORMATS // list of type BarcodeFormat,
135- // ex. listOf(BarcodeFormat.QR_CODE)
138+ // ex. listOf(BarcodeFormat.QR_CODE)
136139 codeScanner.autoFocusMode = AutoFocusMode .SAFE // or CONTINUOUS
137140 codeScanner.scanMode = ScanMode .SINGLE // or CONTINUOUS or PREVIEW
138141 codeScanner.isAutoFocusEnabled = true // Whether to enable auto focus or not
139142 codeScanner.isFlashEnabled = false // Whether to enable flash or not
140-
143+
141144 // Callbacks
142145 codeScanner.decodeCallback = DecodeCallback {
143146 runOnUiThread {
144- Toast .makeText(this , " Scan result: ${it.text} " , Toast .LENGTH_LONG ).show()
147+ Toast .makeText(
148+ this ,
149+ " Scan result: ${it.text} " ,
150+ Toast .LENGTH_LONG
151+ ).show()
145152 }
146153 }
147154 codeScanner.errorCallback = ErrorCallback { // or ErrorCallback.SUPPRESS
148155 runOnUiThread {
149- Toast .makeText(this , " Camera initialization error: ${it.message} " ,
150- Toast .LENGTH_LONG ).show()
156+ Toast .makeText(
157+ this ,
158+ " Camera initialization error: ${it.message} " ,
159+ Toast .LENGTH_LONG
160+ ).show()
151161 }
152162 }
153-
163+
154164 scannerView.setOnClickListener {
155165 codeScanner.startPreview()
156166 }
@@ -186,7 +196,8 @@ public class MainActivity extends AppCompatActivity {
186196 runOnUiThread(new Runnable () {
187197 @Override
188198 public void run () {
189- Toast . makeText(MainActivity . this , result. getText(), Toast . LENGTH_SHORT ). show();
199+ Toast . makeText(MainActivity . this , result. getText(), Toast . LENGTH_SHORT )
200+ .show();
190201 }
191202 });
192203 }
@@ -196,7 +207,7 @@ public class MainActivity extends AppCompatActivity {
196207 public void onClick (View view ) {
197208 mCodeScanner. startPreview();
198209 }
199- });
210+ });
200211 }
201212
202213 @Override
@@ -218,21 +229,38 @@ or fragment:
218229Kotlin
219230
220231``` kotlin
221- class MainFragment : Fragment () {
232+ class MainFragment : Fragment () {
222233 private lateinit var codeScanner: CodeScanner
223234
224- override fun onCreateView (inflater : LayoutInflater , container : ViewGroup ? ,
225- savedInstanceState : Bundle ? ): View {
226- return inflater.inflate(R .layout.fragment_main, container, false )
235+ override fun onCreateView (
236+ inflater : LayoutInflater ,
237+ container : ViewGroup ? ,
238+ savedInstanceState : Bundle ?
239+ ): View {
240+ return inflater.inflate(
241+ R .layout.fragment_main,
242+ container,
243+ false
244+ )
227245 }
228246
229- override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
247+ override fun onViewCreated (
248+ view : View ,
249+ savedInstanceState : Bundle ?
250+ ) {
230251 val scannerView = view.findViewById<CodeScannerView >(R .id.scanner_view)
231252 val activity = requireActivity()
232- codeScanner = CodeScanner (activity, scannerView)
253+ codeScanner = CodeScanner (
254+ activity,
255+ scannerView
256+ )
233257 codeScanner.decodeCallback = DecodeCallback {
234258 activity.runOnUiThread {
235- Toast .makeText(activity, it.text, Toast .LENGTH_LONG ).show()
259+ Toast .makeText(
260+ activity,
261+ it.text,
262+ Toast .LENGTH_LONG
263+ ).show()
236264 }
237265 }
238266 scannerView.setOnClickListener {
@@ -282,7 +310,7 @@ public class MainFragment extends Fragment {
282310 public void onClick (View view ) {
283311 mCodeScanner. startPreview();
284312 }
285- });
313+ });
286314 return root;
287315 }
288316
@@ -301,4 +329,5 @@ public class MainFragment extends Fragment {
301329```
302330
303331### Preview
332+
304333![ Preview screenshot] ( https://raw.githubusercontent.com/yuriy-budiyev/code-scanner/master/images/code_scanner_preview.png )
0 commit comments