autojs调用zxing实现扫码功能

该博客介绍如何在AutoJS中利用Android的Camera API和ZXing库创建一个简单的扫码应用。首先加载dex文件并导入相关ZXing类,然后通过SurfaceView组件设置相机预览并开启自动对焦。当相机捕获图像后,将数据转换为Bitmap,使用ZXing进行二维码/条形码识别。最后,识别结果以UTF-8编码返回。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Andorid的demo需要引用xml资源,autojs无法引用,此次主要实现相机界面部份,实现扫一扫功能。

加载dex文件

runtime.loadDex("core.dex");

导入相关的类:

importClass(com.google.zxing.PlanarYUVLuminanceSource);
importClass(com.google.zxing.common.HybridBinarizer)
importClass(com.google.zxing.BinaryBitmap)
importClass(com.google.zxing.MultiFormatReader)
importClass(com.google.zxing.NotFoundException)
importClass(com.google.zxing.DecodeHintType)
importClass(com.google.zxing.BarcodeFormat)

界面绘制引用SurfaceView组件,相机画面回显!

 ui.layout(
    <vertical>
      <android.view.SurfaceView id="surfaceView" />
    </vertical>
  );

SurfaceView相关设置,与android.hardware.Camera相机进行绑定,开启自动对焦

var mCamera;
var surfaceHolder = ui.surfaceView.getHolder();
surfaceHolder.addCallback(new JavaAdapter(android.view.SurfaceHolder.Callback, {
    surfaceCreated: function (surfaceDestroyed) {
      mCamera = android.hardware.Camera.open(0);
      if (!mCamera) {
        toast("摄像头打开失败");
        return
      }
      try {
        var parameters = mCamera.getParameters();
        size = parameters.getPreviewSize();
        decodeFormats = parameters.getPreviewFormat();
        var focusModes = parameters.getSupportedFocusModes();
        if (focusModes.contains(android.hardware.Camera.Parameters.FOCUS_MODE_AUTO)) {
          parameters.setFocusMode(android.hardware.Camera.Parameters.FOCUS_MODE_AUTO);
        }
        mCamera.setParameters(parameters)
        mCamera.setDisplayOrientation(90);
        mCamera.setPreviewDisplay(surfaceHolder);
      } catch (error) {
        print(error);
      }
    },
    surfaceChanged: function (surfaceDestroyed, arg1, arg2, arg3) {
      mCamera.startPreview();
      setAutoFocus();
      setCallback();
    },
    surfaceDestroyed: function (surfaceDestroyed) {
      focusing = false;
      if (mCamera) {
        try {
          mCamera.release();
        } catch (error) {}
      }
    }
  }))

通过mCamera.setOneShotPreviewCallback拿到当前图片数据,调用zxing二维码识别,调用识别需要先对数据处理,把数据处理成bitmap

var source = new com.google.zxing.PlanarYUVLuminanceSource(data, size.width, size.height, 0, 0, size.width, size.height, false);
var bitmap = new com.google.zxing.BinaryBitmap(new com.google.zxing.common.HybridBinarizer(source));

调用zxing识别,内容识别内设置为utf8

 var reader = new com.google.zxing.MultiFormatReader();
 var m = new java.util.HashMap()
 m.put(com.google.zxing.DecodeHintType.CHARACTER_SET, "utf-8")
var rawResult = reader.decode(bitmap, m);
if (rawResult) {
  	ui.post(function () {
       callback(rawResult.getText());
     })
}

demo下载地址

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值