首先导依赖:
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"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<Button
android:id="@+id/sys"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="扫一扫"/>
<Button
android:id="@+id/ss"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="生成二维码"/>
<ImageView
android:id="@+id/img"
android:layout_width="80dp"
android:layout_height="80dp" />
</LinearLayout>
java代码:
package com.gy.my.fragment;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import com.gy.my.R;
import com.journeyapps.barcodescanner.BarcodeEncoder;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;
public class CircleFragment extends Fragment {
@BindView(R.id.sys)
Button sys;
@BindView(R.id.ss)
Button ss;
@BindView(R.id.img)
ImageView img;
Unbinder unbinder;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.circlefragment, container, false);
unbinder = ButterKnife.bind(this, view);
return view;
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
@OnClick({R.id.sys, R.id.ss})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.sys:
customScan();
break;
case R.id.ss:
img.setImageBitmap(encodeAs("lgy1116"));
break;
}
}
//扫描二维码
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(getContext(), "内容为空", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getContext(), "扫描成功", Toast.LENGTH_LONG).show();
// ScanResult 为 获取到的字符串
String ScanResult = intentResult.getContents();
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
}