我正在尝试通过关注此 YouTube视频来制作条码扫描仪。通过关注此视频,我可以使应用程序正常运行。但由于条码阅读器占据整个页面,而扫描光标仅占据屏幕区域的 40% 左右。所以想知道有没有办法缩小条码,剩下的空间可以用来放一些按钮或者警告TexViews。所以基本上我想设置QR相机视图的宽度和高度。所以有可能吗?
很明显,绿色方块之外的空间是浪费的,这就是为什么我想安排它,使其尺寸约为 200dp*200dp。
代码如下:
package com.example.priyanka.qrbarcodescanner
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
import android.content.pm.PackageManager
import android.hardware.Camera
import android.net.Uri
import android.os.Build
import android.support.v4.app.ActivityCompat
import android.support.v4.content.ContextCompat
import android.support.v7.app.AlertDialog
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import com.google.zxing.Result
import me.dm7.barcodescanner.zxing.ZXingScannerView
import android.Manifest.permission.CAMERA
class MainActivity : AppCompatActivity(), ZXingScannerView.ResultHandler {
private var scannerView: ZXingScannerView? = null
internal var mcontext: Context? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mcontext = this
scannerView = ZXingScannerView(this)
setContentView(scannerView)
val currentApiVersion = Build.VERSION.SDK_INT
if (currentApiVersion >= Build.VERSION_CODES.M) {
if (checkPermission()) {
Toast.makeText(applicationContext, "Permission already granted!", Toast.LENGTH_LONG).show()
} else {
requestPermission()
}
}
}
private fun checkPermission(): Boolean {
return ContextCompat.checkSelfPermission(applicationContext, CAMERA) == PackageManager.PERMISSION_GRANTED
}
private fun requestPermission() {
ActivityCompat.requestPermissions(this, arrayOf(CAMERA), REQUEST_CAMERA)
}
public override fun onResume() {
super.onResume()
val currentapiVersion = android.os.Build.VERSION.SDK_INT
if (currentapiVersion >= android.os.Build.VERSION_CODES.M) {
if (checkPermission()) {
if (scannerView == null) {
scannerView = ZXingScannerView(this)
setContentView(scannerView)
}
scannerView!!.setResultHandler(this)
scannerView!!.startCamera()
} else {
requestPermission()
}
}
}
public override fun onDestroy() {
super.onDestroy()
scannerView!!.stopCamera()
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
when (requestCode) {
REQUEST_CAMERA -> if (grantResults.size > 0) {
val cameraAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED
if (cameraAccepted) {
Toast.makeText(applicationContext, "Permission Granted, Now you can access camera", Toast.LENGTH_LONG).show()
} else {
Toast.makeText(applicationContext, "Permission Denied, You cannot access and camera", Toast.LENGTH_LONG).show()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (shouldShowRequestPermissionRationale(CAMERA)) {
showMessageOKCancel("You need to allow access to both the permissions",
DialogInterface.OnClickListener { dialog, which ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(arrayOf(CAMERA),
REQUEST_CAMERA)
}
})
return
}
}
}
}
}
}
private fun showMessageOKCancel(message: String, okListener: DialogInterface.OnClickListener) {
android.support.v7.app.AlertDialog.Builder(mcontext!!)
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show()
}
override fun handleResult(result: Result) {
val myResult = result.text
Log.d("QRCodeScanner", result.text)
Log.d("QRCodeScanner", result.barcodeFormat.toString())
val builder = AlertDialog.Builder(this)
builder.setTitle("Scan Result")
builder.setPositiveButton("OK") { dialog, which -> scannerView!!.resumeCameraPreview(this@MainActivity) }
builder.setNeutralButton("Visit") { dialog, which ->
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(myResult))
startActivity(browserIntent)
}
builder.setMessage(result.text)
val alert1 = builder.create()
alert1.show()
}
companion object {
private val REQUEST_CAMERA = 1
private val camId = Camera.CameraInfo.CAMERA_FACING_BACK
}
}
Run Code Online (Sandbox Code Playgroud)
先感谢您。
您可以将 zxing 嵌入式库与这些 gradle 依赖项一起使用:
implementation "com.journeyapps:zxing-android-embedded:3.5.0@aar"
implementation "com.google.zxing:core:3.3.0"
Run Code Online (Sandbox Code Playgroud)
然后把它放在你的布局中
<com.journeyapps.barcodescanner.DecoratedBarcodeView
android:id="@+id/qr_scanner_view"
android:layout_width="@dimen/your_width"
android:layout_height="@dimen/your_height" />
Run Code Online (Sandbox Code Playgroud)
然后在你的代码中使用它
DecoratedBarcodeView qrView = findViewById(R.id.qr_scanner_view);
CameraSettings s = new CameraSettings();
s.setRequestedCameraId(0); // front/back/etc
qrView.getBarcodeView().setCameraSettings(s);
qrView.resume();
qrView.decodeSingle(new BarcodeCallback() {
@Override
public void barcodeResult(BarcodeResult result) {
Log.d("barcode result: " + result.toString());
// do your thing with result
}
@Override
public void possibleResultPoints(List<ResultPoint> resultPoints) {}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8802 次 |
| 最近记录: |