2020-02-20 06:19:14 +08:00
|
|
|
package de.mintware.barcode_scan
|
2017-10-30 01:05:11 +08:00
|
|
|
|
|
|
|
import android.Manifest
|
|
|
|
import android.app.Activity
|
|
|
|
import android.content.Intent
|
|
|
|
import android.content.pm.PackageManager
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.view.Menu
|
|
|
|
import android.view.MenuItem
|
2019-08-15 16:09:44 +08:00
|
|
|
import androidx.core.app.ActivityCompat
|
|
|
|
import androidx.core.content.ContextCompat
|
2017-10-30 01:05:11 +08:00
|
|
|
import com.google.zxing.Result
|
|
|
|
import me.dm7.barcodescanner.zxing.ZXingScannerView
|
|
|
|
|
|
|
|
|
|
|
|
class BarcodeScannerActivity : Activity(), ZXingScannerView.ResultHandler {
|
|
|
|
|
|
|
|
lateinit var scannerView: me.dm7.barcodescanner.zxing.ZXingScannerView
|
|
|
|
|
|
|
|
companion object {
|
|
|
|
val REQUEST_TAKE_PHOTO_CAMERA_PERMISSION = 100
|
|
|
|
val TOGGLE_FLASH = 200
|
|
|
|
|
|
|
|
}
|
2018-01-06 00:21:25 +08:00
|
|
|
|
2017-10-30 01:05:11 +08:00
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
|
super.onCreate(savedInstanceState)
|
|
|
|
title = ""
|
|
|
|
scannerView = ZXingScannerView(this)
|
|
|
|
scannerView.setAutoFocus(true)
|
2019-01-04 17:21:50 +08:00
|
|
|
// this paramter will make your HUAWEI phone works great!
|
|
|
|
scannerView.setAspectTolerance(0.5f)
|
2017-10-30 01:05:11 +08:00
|
|
|
setContentView(scannerView)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
|
|
|
if (scannerView.flash) {
|
|
|
|
val item = menu.add(0,
|
2019-08-15 16:09:44 +08:00
|
|
|
TOGGLE_FLASH, 0, "关闭闪光灯")
|
2017-10-30 01:05:11 +08:00
|
|
|
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS)
|
|
|
|
} else {
|
|
|
|
val item = menu.add(0,
|
2019-08-15 16:09:44 +08:00
|
|
|
TOGGLE_FLASH, 0, "开启闪光灯")
|
2017-10-30 01:05:11 +08:00
|
|
|
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS)
|
|
|
|
}
|
|
|
|
return super.onCreateOptionsMenu(menu)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
|
|
|
if (item.itemId == TOGGLE_FLASH) {
|
|
|
|
scannerView.flash = !scannerView.flash
|
|
|
|
this.invalidateOptionsMenu()
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
return super.onOptionsItemSelected(item)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onResume() {
|
|
|
|
super.onResume()
|
|
|
|
scannerView.setResultHandler(this)
|
2018-01-06 00:21:25 +08:00
|
|
|
// start camera immediately if permission is already given
|
2017-10-30 01:05:11 +08:00
|
|
|
if (!requestCameraAccessIfNecessary()) {
|
|
|
|
scannerView.startCamera()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onPause() {
|
|
|
|
super.onPause()
|
|
|
|
scannerView.stopCamera()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun handleResult(result: Result?) {
|
|
|
|
val intent = Intent()
|
|
|
|
intent.putExtra("SCAN_RESULT", result.toString())
|
|
|
|
setResult(Activity.RESULT_OK, intent)
|
|
|
|
finish()
|
|
|
|
}
|
|
|
|
|
2018-01-06 00:21:25 +08:00
|
|
|
fun finishWithError(errorCode: String) {
|
|
|
|
val intent = Intent()
|
|
|
|
intent.putExtra("ERROR_CODE", errorCode)
|
|
|
|
setResult(Activity.RESULT_CANCELED, intent)
|
|
|
|
finish()
|
|
|
|
}
|
|
|
|
|
2017-10-30 01:05:11 +08:00
|
|
|
private fun requestCameraAccessIfNecessary(): Boolean {
|
|
|
|
val array = arrayOf(Manifest.permission.CAMERA)
|
|
|
|
if (ContextCompat
|
2018-01-06 00:21:25 +08:00
|
|
|
.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
|
|
|
|
|
|
|
|
ActivityCompat.requestPermissions(this, array,
|
|
|
|
REQUEST_TAKE_PHOTO_CAMERA_PERMISSION)
|
2017-10-30 01:05:11 +08:00
|
|
|
return true
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
2018-01-06 00:21:25 +08:00
|
|
|
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>,grantResults: IntArray) {
|
2017-10-30 01:05:11 +08:00
|
|
|
when (requestCode) {
|
|
|
|
REQUEST_TAKE_PHOTO_CAMERA_PERMISSION -> {
|
|
|
|
if (PermissionUtil.verifyPermissions(grantResults)) {
|
|
|
|
scannerView.startCamera()
|
2018-01-06 00:21:25 +08:00
|
|
|
} else {
|
|
|
|
finishWithError("PERMISSION_NOT_GRANTED")
|
2017-10-30 01:05:11 +08:00
|
|
|
}
|
|
|
|
}
|
2018-01-06 00:21:25 +08:00
|
|
|
else -> {
|
|
|
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
|
|
|
}
|
2017-10-30 01:05:11 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
object PermissionUtil {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check that all given permissions have been granted by verifying that each entry in the
|
|
|
|
* given array is of the value [PackageManager.PERMISSION_GRANTED].
|
|
|
|
|
|
|
|
* @see Activity.onRequestPermissionsResult
|
|
|
|
*/
|
|
|
|
fun verifyPermissions(grantResults: IntArray): Boolean {
|
|
|
|
// At least one result must be checked.
|
|
|
|
if (grantResults.size < 1) {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
// Verify that each required permission has been granted, otherwise return false.
|
|
|
|
for (result in grantResults) {
|
|
|
|
if (result != PackageManager.PERMISSION_GRANTED) {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
2018-01-06 00:21:25 +08:00
|
|
|
}
|