阿里云首页 移动开发平台 mPaaS

进阶指南

标准 UI 下使用扫一扫

窗口扫码表示在旧标准 UI 下使用扫码功能。若需使用支持多码识别的全屏扫码功能,请将 mPaaS 基线版本升级至 10.1.68.33 及以上。

全屏扫码

如需连续扫码,即扫码识别成功后不退出继续识别,可根据如下代码来实现。

  1. ScanRequest scanRequest = new ScanRequest();
  2. MPScan.startMPaasScanFullScreenActivity(this, scanRequest, new MPScanCallbackAdapter() {
  3. @Override
  4. public boolean onScanFinish(Context context, MPScanResult mpScanResult, final MPScanStarter mpScanStarter) {
  5. new android.app.AlertDialog.Builder(context)
  6. .setMessage(mpScanResult != null ? mpScanResult.getText() : "没有识别到码")
  7. .setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() {
  8. @Override
  9. public void onClick(DialogInterface dialog, int which) {
  10. mpScanStarter.restart();
  11. }
  12. })
  13. .create()
  14. .show();
  15. // 返回 false 表示该回调未消费,下次识别继续回调
  16. return false;
  17. }
  18. });

重写 MPScanCallbackAdapter 的其他方法来监听其他事件:

  1. MPScan.startMPaasScanFullScreenActivity(this, scanRequest, new MPScanCallbackAdapter() {
  2. @Override
  3. public boolean onScanFinish(final Context context, MPScanResult mpScanResult, final MPScanStarter mpScanStarter) {
  4. return true;
  5. }
  6. @Override
  7. public boolean onScanError(Context context, MPScanError error) {
  8. // 识别错误
  9. return super.onScanError(context, error);
  10. }
  11. @Override
  12. public boolean onScanCancel(Context context) {
  13. // 识别取消
  14. return super.onScanCancel(context);
  15. }
  16. });

在启动全屏扫码功能前,可根据如下代码设置启动参数。

  1. ScanRequest scanRequest = new ScanRequest();
  2. // 设置提示文字
  3. scanRequest.setViewText("提示文字");
  4. // 设置打开手电筒提示文字
  5. scanRequest.setOpenTorchText("打开手电筒");
  6. // 设置关闭手电筒提示文字
  7. scanRequest.setCloseTorchText("关闭手电筒");
  8. // 设置扫码识别类型
  9. // 该设置仅对直接扫码生效,对识别相册图片无效
  10. scanRequest.setRecognizeType(
  11. ScanRequest.RecognizeType.QR_CODE, // 二维码
  12. ScanRequest.RecognizeType.BAR_CODE, // 条形码
  13. ScanRequest.RecognizeType.DM_CODE, // DM 码
  14. ScanRequest.RecognizeType.PDF417_Code // PDF417 码
  15. ); // 不设置,默认识别前三种
  16. // 设置隐藏相册按钮
  17. scanRequest.setNotSupportAlbum(true);
  18. // 设置多码标记图片
  19. scanRequest.setMultiMaMarker(R.drawable.green_arrow);
  20. // 设置多码提示文字
  21. scanRequest.setMultiMaTipText("点击绿色箭头选择码");
  22. // 设置选中单个码后的圆点颜色
  23. scanRequest.setMaTargetColor("#32CD32");

窗口扫码

使用在窗口扫码功能时,可根据如下代码设置启动参数。

  1. ScanRequest scanRequest = new ScanRequest();
  2. // 设置扫码页UI风格
  3. scanRequest.setScanType(ScanRequest.ScanType.QRCODE); // 二维码风格
  4. scanRequest.setScanType(ScanRequest.ScanType.BARCODE); // 条形码风格,默认
  5. // 设置扫码界面 title
  6. scanRequest.setTitleText("标准扫码");
  7. // 设置扫码窗口下提示文字
  8. scanRequest.setViewText("提示文字");
  9. // 设置打开手电筒提示文字,仅 10.1.60 及以上基线支持
  10. scanRequest.setOpenTorchText("打开手电筒");
  11. // 设置关闭手电筒提示文字,仅 10.1.60 及以上基线支持
  12. scanRequest.setCloseTorchText("关闭手电筒");
  13. // 设置扫码识别类型,仅 10.1.60.6+ 和 10.1.68.2+ 基线支持
  14. // 该设置仅对直接扫码生效,对识别相册图片无效
  15. scanRequest.setRecognizeType(
  16. ScanRequest.RecognizeType.QR_CODE, // 二维码
  17. ScanRequest.RecognizeType.BAR_CODE, // 条形码
  18. ScanRequest.RecognizeType.DM_CODE, // DM 码
  19. ScanRequest.RecognizeType.PDF417_Code // PDF417 码
  20. ); // 不设置,默认识别前三种
  21. // 设置透明状态栏(在 Android 4.4+ 系统上生效),仅 10.1.68.15+ 基线支持
  22. scanRequest.setTranslucentStatusBar(true);
  23. // 设置隐藏相册按钮,仅 10.1.68.22+ 基线支持
  24. scanRequest.setNotSupportAlbum(true);

自定义 UI 下使用扫一扫

请参考 代码示例

自定义 UI 升级适配

从 10.1.68.5 和 10.1.60.11 开始,扫一扫 SDK 新增了类 MPScanner 以及相关接口,用来替代此前自定义扫码需要使用的 BQCScanCallback、MaScanCallback 等原始接口。相比原始接口,MPScanner 提供了完整的封装性、简洁易懂的 API,以及更多新特性的支持(例如环境亮度不足的回调),强烈推荐您使用 MPScanner 来开发自定义扫码页。

如果您仍然在使用 BQCScanCallback、MaScanCallback 等原始接口,当您从低版本升级时可能需要适配以下变更:

  • 10.1.68.22 版本:MaScanCallback 类、BQCScanCallback 类、IOnMaSDKDecodeInfo 类新增部分接口,您只需空实现这些接口即可,其中 MaScanCallback.onMaCodeInterceptor 方法返回 false 。
  • 10.1.60.6 版本:BQCScanCallback 类新增部分接口,您只需空实现这些接口即可。
  • 10.1.60 版本:BQCScanCallback 类新增部分接口,您只需空实现这些接口即可。
  • 10.1.20 版本:MaScanCallback 类接口变更如下:
    void onResultMa(MaScanResult maScanResult) 变更为 void onResultMa(MultiMaScanResult multiMaScanResult)
    您可以按照以下方式获取 MaScanResult
    1. MaScanResult maScanResult = multiMaScanResult.maScanResults[0];

自定义 UI API 说明

MPScanner

自定义 UI 相关的设置内容如下:

  1. /**
  2. * 设置显示相机内容的 View
  3. * 推荐在 {@link MPScanListener} 的 onConfiguration 方法中调用
  4. *
  5. * @param textureView 自定义扫码页中的 TextureView
  6. */
  7. public void setDisplayView(TextureView textureView);
  8. /**
  9. * 设置扫描识别的区域
  10. *
  11. * @param rect 识别的区域
  12. */
  13. public void setScanRegion(Rect rect);
  14. /**
  15. * 设置扫描监听器
  16. */
  17. public void setMPScanListener(MPScanListener mpScanListener);
  18. /**
  19. * 设置识别图像灰度值监听器
  20. */
  21. public void setMPImageGrayListener(MPImageGrayListener mpImageGrayListener);
  22. /**
  23. * 获取 Camera 对象
  24. *
  25. * @return Camera 对象
  26. */
  27. public Camera getCamera();
  28. /**
  29. * 设置识别的码类型
  30. * 仅对直接扫码生效,对从bitmap中识别码无效
  31. *
  32. *
  33. * @param recognizeTypes BAR_CODE 条形码;
  34. * QR_CODE 二维码;
  35. * DM_CODE DM码;
  36. * PDF417_CODE PDF417码;
  37. * 不设置默认识别前三种
  38. */
  39. public void setRecognizeType(MPRecognizeType... recognizeTypes);

自定义 UI 相关的扫描内容如下:

  1. /**
  2. * 打开相机并开始扫描
  3. *
  4. * 首次进入页面时或相机关闭状态下调用
  5. */
  6. public void openCameraAndStartScan();
  7. /**
  8. * 关闭相机并停止扫描
  9. */
  10. public void closeCameraAndStopScan();
  11. /**
  12. * 开始扫描
  13. *
  14. * 不会更改相机状态,需在相机打开的状态下调用才能生效
  15. */
  16. public void startScan();
  17. /**
  18. * 停止扫描
  19. *
  20. * 不会更改相机状态
  21. */
  22. public void stopScan();
  23. /**
  24. * 从 bitmap 中识别码
  25. *
  26. * @param bitmap 需要识别的 bitmap
  27. * @return 识别结果
  28. */
  29. public MPScanResult scanFromBitmap(Bitmap bitmap);

其他:

  1. /**
  2. * 打开或关闭手电筒
  3. *
  4. * @return 调用方法后,手电筒是否打开
  5. */
  6. public boolean switchTorch();
  7. /**
  8. * 打开手电筒
  9. */
  10. public void openTorch();
  11. /**
  12. * 关闭手电筒
  13. */
  14. public void closeTorch();
  15. /**
  16. * 播放默认的“哔哔”声
  17. */
  18. public void beep();
  19. /**
  20. * 释放资源
  21. *
  22. * 请在 onDestroy 中调用
  23. */
  24. public void release();

MPScanListener

  1. /**
  2. * 扫描参数配置完成
  3. */
  4. void onConfiguration();
  5. /**
  6. * 扫描识别开始
  7. */
  8. void onStart();
  9. /**
  10. * 识别成功
  11. *
  12. * @param result 识别结果
  13. */
  14. void onSuccess(MPScanResult result);
  15. /**
  16. * 识别错误
  17. *
  18. * @param error 错误
  19. */
  20. void onError(MPScanError error);

MPImageGrayListener

  1. /**
  2. * 获取识别图像的平均灰度值
  3. *
  4. * 正常范围大约在50-140之间,
  5. * 当灰度值低于或高于正常范围时,通常意味着环境亮度过低或过高,可以提示用户打开或关闭手电筒
  6. * 注意:该方法在识别过程中会不断被调用
  7. *
  8. * @param gray 图像的平均灰度值
  9. */
  10. void onGetImageGray(int gray);

MPScanResult

  1. /**
  2. * 识别结果字符串
  3. */
  4. private String text;
  5. /**
  6. * 识别的码类型
  7. */
  8. private MPRecognizeType mpRecognizeType;