//布局
<ImageView android:id="@+id/erweima" android:layout_width="200dp" android:layout_height="200dp" android:layout_marginStart="8dp" android:layout_marginLeft="8dp" android:layout_marginTop="16dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" android:background="@drawable/ic_launcher_background" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/editstring" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginLeft="8dp" android:layout_marginTop="48dp" android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:ems="10" android:hint="请输入内容" android:inputType="textPersonName" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.503" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/erweima" /> <Button android:id="@+id/saomiao" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="44dp" android:layout_marginLeft="44dp" android:layout_marginTop="64dp" android:text="点击扫描" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/editstring" /> <Button android:id="@+id/shengcheng" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="80dp" android:layout_marginLeft="80dp" android:layout_marginTop="68dp" android:text="点击生成二维码" app:layout_constraintStart_toEndOf="@+id/saomiao" app:layout_constraintTop_toBottomOf="@+id/editstring" />
//Fragment中
public class ThreeFragment extends Fragment { private View inflate; private ImageView mImageView; private EditText mEditText; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment inflate = inflater.inflate(R.layout.fragment_three, container, false); initView(); return inflate; } private void initView() { mImageView = inflate.findViewById(R.id.erweima); mEditText = inflate.findViewById(R.id.editstring); inflate.findViewById(R.id.saomiao).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { checkPermission(); } }); inflate.findViewById(R.id.shengcheng).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { createQRCode(); } }); } private void checkPermission() { //第一步,判断系统版本是否为6.0以上 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //第二步:checkSelfPermission判断有没有此权限 //第一个参数:上下文 //第二个参数:我们想要判断的权限,此处为相机权限 //PackageManager.PERMISSION_GRANTED 条件,权限有没有被授予 if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { //如果没授予,则申请权限 //第一个:上下文 //第二个:要申请的权限数组,此处为相机权限 //第三个:请求码,startActivityForResult一样 ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, 100); } } else { startActivity(new Intent(getActivity(), ScanActivity.class)); } } /** * 接受权限请求结果 * * @param requestCode 请求码 * @param permissions 我们请求的权限数组 * @param grantResults 返回结果数组 */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); //如果requestCode匹配,切权限申请通过 if (requestCode == 100 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { startActivity(new Intent(getActivity(), ScanActivity.class)); } } private void createQRCode() { QRTask qrTask = new QRTask(getActivity(), mImageView, mEditText); qrTask.execute(mEditText.getText().toString()); } static class QRTask extends AsyncTask<String, Void, Bitmap> { private WeakReference<Context> mContext; private WeakReference<ImageView> mImageView; public QRTask(Context context, ImageView image, EditText ed) { mContext = new WeakReference<>(context); mImageView = new WeakReference<>(image); } @Override protected Bitmap doInBackground(String... params) { String str = params[0]; if (TextUtils.isEmpty(str)) { return null; } // int size = mContext.get().getResources().getDimensionPixelOffset(R.dimen.qr_code_size);- return QRCodeEncoder.syncEncodeQRCode(str, 200); } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); if (bitmap != null) { mImageView.get().setImageBitmap(bitmap); } else { Toast.makeText(mContext.get(), "生成失败", Toast.LENGTH_SHORT).show(); } } } }
//ScanActivity中的布局
<cn.bingoogolapple.qrcode.zxing.ZXingView android:id="@+id/zxing" android:layout_width="wrap_content" android:layout_height="wrap_content"></cn.bingoogolapple.qrcode.zxing.ZXingView>
//ScanActivity
public class ScanActivity extends Activity implements QRCodeView.Delegate { private ZXingView zXingView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_scan); zXingView = findViewById(R.id.zxing); zXingView.setDelegate(this); } @Override protected void onResume() { super.onResume(); zXingView.startCamera(); zXingView.startSpotAndShowRect(); zXingView.openFlashlight(); } @Override protected void onStop() { super.onStop(); zXingView.stopCamera(); } @Override protected void onDestroy() { super.onDestroy(); zXingView.onDestroy(); } @Override public void onScanQRCodeSuccess(String result) { } @Override public void onCameraAmbientBrightnessChanged(boolean isDark) { } @Override public void onScanQRCodeOpenCameraError() { } }
//依赖
implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.4'