二维码扫描、生成

添加权限

 <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />

添加依赖

implementation 'com.journeyapps:zxing-android-embedded:3.6.0'
implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.4'

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:background="#ffa"
    android:orientation="vertical"
    android:layout_height="match_parent"
    tools:context=".Fragment.CircleFragment">
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="扫一扫"
        tools:layout_editor_absoluteX="165dp"
        tools:layout_editor_absoluteY="137dp" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="生成二维码"
        tools:layout_editor_absoluteX="165dp"
        tools:layout_editor_absoluteY="246dp" />

    <ImageView
        android:id="@+id/zxiv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@mipmap/ic_launcher"
        />

</LinearLayout>

Activity文件

public class CircleFragment extends Fragment {


    @BindView(R.id.button)
    Button button;
    @BindView(R.id.button2)
    Button button2;
    @BindView(R.id.zxiv)
    ImageView zxiv;
    Unbinder unbinder;

    private String name = "1608C";

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_circle, container, false);
        unbinder = ButterKnife.bind(this, view);

        return view;
    }


    //扫描二维码
    public void customScan() {
        IntentIntegrator integrator = new IntentIntegrator(getActivity());
        integrator.setDesiredBarcodeFormats(IntentIntegrator.CODE_39);
        integrator.setCaptureActivity(ScanActivity.class);
        integrator.setPrompt("请扫描二维码");//底部的提示文字,设为""可以置空
        integrator.setCameraId(0);//前置或者后置摄像头
        integrator.setBeepEnabled(true);//扫描成功的「哔哔」声,默认开启
        integrator.setBarcodeImageEnabled(true);
        integrator.initiateScan();
    }
    //生成二维码

    public Bitmap encodeAs(String str) {
        Bitmap bitmap = null;
        BitMatrix result = null;
        MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
        try {
            result = multiFormatWriter.encode(str, BarcodeFormat.QR_CODE, 200, 200);
            // 使用 ZXing Android Embedded 要写的代码
            BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
            bitmap = barcodeEncoder.createBitmap(result);
        } catch (WriterException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException iae) {
            return null;
        }
        return bitmap;
    }

    @Override
    // 通过 onActivityResult的方法获取 扫描回来的 值
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if (intentResult != null) {
            if (intentResult.getContents() == null) {
                Toast.makeText(getActivity(), "内容为空", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(getActivity(), "扫描成功", Toast.LENGTH_LONG).show();
                // ScanResult 为 获取到的字符串
                String ScanResult = intentResult.getContents();
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }

    @OnClick({R.id.button, R.id.button2})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.button:
                customScan();
                break;
            case R.id.button2:
                zxiv.setImageBitmap(encodeAs("1608c大神养成记"));
                break;
        }
    }
}

 再创建一个Activity类:不用写内容,但是要继承CaptureActivity,在清单文件中注册activity

public class ScanActivity extends CaptureActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }
}
 

猜你喜欢

转载自blog.csdn.net/weixin_43882999/article/details/86365914
今日推荐