快速开始

本文介绍的是在 Android 中接入扫一扫 SDK 的操作步骤。

说明

自 2020 年 6 月 28 日起,mPaaS 停止维护 10.1.32 基线。请升级到 10.1.60、10.1.68 或 10.2.3 基线。扫一扫支持 原生 AAR 组件化(Portal&Bundle)两种接入方式。文本将介绍在 10.2.3、10.1.68、10.1.60 基线下如何使用扫码功能。自 mPaaS 10.1.68.33 版本基线起,扫一扫支持全屏模式下的多码识别。自 mPaaS 10.2.3 版本基线起,扫一扫新增 AI 识别小码并自动放大的功能。

前置条件

添加 SDK

10.2.3

如需使用 AI 识别小码并自动放大功能,请安装 扫一扫 AI 组件。

原生 AAR 方式

参考 AAR 组件管理,通过 组件管理(AAR) 在工程中安装 扫一扫/扫一扫 AI 组件。

组件化方式

在 Portal 和 Bundle 工程中通过 组件管理 安装 扫一扫/扫一扫 AI 组件。更多信息,参考 管理组件依赖

10.1.68/10.1.60

原生 AAR 方式

参考 AAR 组件管理,通过 组件管理(AAR) 在工程中安装 扫码 组件。

组件化方式

在 Portal 和 Bundle 工程中通过 组件管理 安装 扫码 组件。更多信息,参考 管理组件依赖

使用扫一扫功能

10.2.3/10.1.68

使用全屏扫码功能

ScanRequest scanRequest = new ScanRequest();
MPScan.startMPaasScanFullScreenActivity(this, scanRequest, new MPScanCallbackAdapter() {
    @Override
    public boolean onScanFinish(final Context context, MPScanResult mpScanResult, final MPScanStarter mpScanStarter) {
        Toast.makeText(getApplicationContext(),
                mpScanResult != null ? mpScanResult.getText() : "没有识别到码", Toast.LENGTH_SHORT).show();
        ((Activity) context).finish();
        // 返回 true 表示该回调已消费,不需要再次回调
        return true;
    }
});

使用窗口扫码功能

在 mPaaS 10.1.68 基线上使用窗口扫码功能(旧标准 UI),若扫码失败直接返回扫码界面,若扫码成功将获取二维码的 URL 信息。

ScanRequest scanRequest = new ScanRequest();
scanRequest.setScanType(ScanRequest.ScanType.QRCODE);
MPScan.startMPaasScanActivity(this, scanRequest, new ScanCallback() {
    @Override
    public void onScanResult(final boolean isProcessed, final Intent result) {
        if (!isProcessed) {
            // 扫码界面点击物理返回键或左上角返回键
            return;
        }
        // 注意:本回调是在子线程中执行
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (result == null || result.getData() == null) {
                    // 扫码失败
                    return;
                }
                // 扫码成功
                String url = result.getData().toString();
            }
        });
    }
});

10.1.60

在 10.1.60 基线上使用扫码功能,若扫码失败直接返回扫码界面,若扫码成功将获取二维码的 URL 信息。

  ScanService service = LauncherApplicationAgent
      .getInstance().getMicroApplicationContext()
      .findServiceByInterface(ScanService.class.getName());

  ScanRequest scanRequest = new ScanRequest();
  scanRequest.setScanType(ScanRequest.ScanType.QRCODE);

  service.scan(this, scanRequest, new ScanCallback() {
      @Override
      public void onScanResult(boolean isProcessed, final Intent result) {
          if (!isProcessed) {
              // 扫码界面点击物理返回键或左上角返回键
              return;
          }
          // 注意:本回调是在子线程中执行
          runOnUiThread(new Runnable() {
              @Override
              public void run() {
                  if (result == null || result.getData() == null) {
                      // 扫码失败
                      return;
                  }
                  // 扫码成功
                  String url = result.getData().toString();
              }
          });
      }
  });