autojs调用zxing实现扫码功能

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下载地址

你可能感兴趣的:(android,ui)