使用 SDK

基于默认的 UI 界面接入

扫码组件提供一个公共扫码页面,可以直接调用。

Intent intent = QrCodeActivity.from(this)
                    .enableAutoFlash(autoFlash)                 //设置是否自动在暗处开启闪光灯,默认不开启
                    .enableAlbum(true)                          //设置是否展示从相册选择二维码入口,默认展示
                    .enableMultiCodeSelection(true)             //设置是否支持多码选择,默认支持
                    .setFilters(mKeywords)                      //设置过滤二维码关键字
                    .getIntent();
startActivityForResult(intent, REQUEST_CODE_START_CAMERA);

复写 Activity 的 onActivityResult 方法处理扫码结果:

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_START_CAMERA && resultCode == RESULT_OK && data != null) {

        // list 为返回的扫码结果列表
        List<ScanResult> list = data.getParcelableArrayListExtra(QrCodeActivity.KEY_RESULT);

        for (ScanResult result : list) {
            // ScanResult.data 为解析出来的二维码字符串
            Log.d(TAG, result.data);
            ...
        }
    }
}

基于自定义 View 接入

布局中配置扫码 View 控件。

      <RelativeLayout
          android:layout_width="match_parent"
          android:layout_height="0dp"
          android:layout_weight="1"
          >
          <com.tencent.tmf.scan.api.QrCodeScanView
              android:id="@+id/scanview"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:layout_centerInParent="true" />
      </RelativeLayout>

Activity 中获取扫码 View 并回调生命周期。

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.layout_qr_code_activity);
          mScanView = findViewById(R.id.scanview);
          mScanView.onCreate();
          mScanView.setResultCallback(this);//设置扫码结果回调 ValuesCallback
      }

      @Override
      protected void onStart() {
          super.onStart();
          mScanView.onStart();
      }

      @Override
      protected void onResume() {
          super.onResume();
          mScanView.onResume();
      }

      @Override
      public void onPause() {
          super.onPause();
          mScanView.onPause();
      }

      @Override
      protected void onStop() {
          super.onStop();
          mScanView.onStop();
      }

      @Override
      protected void onDestroy() {
          super.onDestroy();
          mScanView.onDestroy();
      }

实现 ValuesCallback,接收解码数据。

ValuesCallback mScanCallback = new ValuesCallback() {
    @Override
    public void onResults(final List<ScanResult> values) {
        if(values == null){
            return;
        }
        MainThreadUtils.post(new Runnable() {
            @Override
            public void run() {
                ToastUtils.show(getApplicationContext(), values.toString(), 
                    Toast.LENGTH_LONG);
            }
        });
    }
};
Copyright © 2013-2023 Tencent Cloud. all right reserved,powered by GitbookUpdate Time 2023-08-31 14:46:07

results matching ""

    No results matching ""