Android实现扫描二维码功能

本文实例为大家分享了Android实现扫描二维码的具体代码,供大家参考,具体内容如下

1.效果图:

2.引用公共库:builder.radle,在app目录下

implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-vision:19.0.0'
implementation 'com.google.android.gms:auth-api-impl:11.6.0'

3.清单文件,拍照权限申请

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

4.主界面:

package com.example.administrator.testz;

import android.Manifest;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.os.Vibrator;
import android.util.Log;
import android.util.SparseArray;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.TextView;

import com.google.android.gms.vision.CameraSource;
import com.google.android.gms.vision.Detector;
import com.google.android.gms.vision.barcode.Barcode;
import com.google.android.gms.vision.barcode.BarcodeDetector;

import java.io.IOException;
import java.util.ArrayList;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

public class MainActivity extends AppCompatActivity {

 SurfaceView surfaceView;
 CameraSource cameraSource;
 TextView qrCodeText;
 BarcodeDetector barcodeDetector;
 public static ArrayList<String> scannList;

 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 surfaceView = (SurfaceView) findViewById(R.id.qrView);
 qrCodeText = (TextView) findViewById(R.id.tv);
 scannList = new ArrayList<>();
 barcodeDetector = new BarcodeDetector.Builder(this)
  .setBarcodeFormats(Barcode.QR_CODE)
  .build();
 cameraSource = new CameraSource.Builder(this, barcodeDetector)
  .setRequestedPreviewSize(640, 480)
  .setAutoFocusEnabled(true)
  .build();
 surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
  @Override
  public void surfaceCreated(SurfaceHolder holder) {
  if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
   return;
  }
  try {
   cameraSource.start(holder);
  } catch (IOException e) {
   e.printStackTrace();
  }
  }

  @Override
  public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

  }

  @Override
  public void surfaceDestroyed(SurfaceHolder holder) {
  cameraSource.stop();
  }
 });

 barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {
  @Override
  public void release() {
  }

  @Override
  public void receiveDetections(Detector.Detections<Barcode> detections) {
  final SparseArray<Barcode> qrCode = detections.getDetectedItems();

  if (qrCode.size() != 0) {
   qrCodeText.post(new Runnable() {
   @Override
   public void run() {
    qrCodeText.setText(qrCode.valueAt(0).displayValue);
    addInList(qrCode.valueAt(0).displayValue);
   }
   });
  }
  }
 });

 }

 private void addInList(String scannResult) {
 if (scannList.isEmpty()) {
  scannList.add(scannResult);
 } else {
  String a = scannList.get(scannList.size() - 1);
  if (!a.equals(scannResult)) {
  scannList.add(scannResult);
  }
 }
 for (String s : scannList) {
  Log.e("s", "onCreate: " + s);
 }
 Log.e("size", "addInList: " + scannList.size());

 }

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

 }
}

5.布局页面:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context="com.example.administrator.testz.MainActivity">

 <SurfaceView
 android:id="@+id/qrView"
 android:layout_width="300dp"
 android:layout_height="300dp"
 android:layout_marginStart="32dp"
 android:layout_marginLeft="32dp"
 android:layout_marginEnd="32dp"
 android:layout_marginRight="32dp"
 android:orientation="vertical" />

 <TextView
 android:id="@+id/tv"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentBottom="true"
 android:text="TextView"
 android:textSize="30sp" />

</RelativeLayout>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android扫描和生成二维码

    本文实例为大家分享了Android扫描和生成二维码的具体代码,供大家参考,具体内容如下 MainActivity.java public class MainActivity extends AppCompatActivity { private ImageView mImageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCo

  • Android实现二维码扫描和生成的简单方法

    这里简单介绍一下ZXing库.ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口.Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码.该项目可实现的条形码编码和解码.目前支持以下格式:UPC-A,UPC-E.EAN-8,EAN-13.39码.93码.ZXing是个很经典的条码/二维码识别的开源类库,以前在功能机上,就有开发者使用J2ME运用ZXing了,不过要支持JSR-234规范(自动对焦)的手机才能发挥其威力. ZXing

  • php生成Android客户端扫描可登录的二维码

    本文实例为大家分享了php网页生成二维码,Android客户端扫描登录的具体代码,供大家参考,具体内容如下 使用了Github上具有扫码功能的ZXing开源库,使用了通过随机数生成二维码图片网络API,整个过程经过三步: 1.PHP网页生成二维码,相应随机数存储到数据库中: 2.Android客户端扫码,携带username保存至随机数对应的位置: 3.每隔一段时间,PHP通过Ajax轮询数据库,判断是否为空,不为空则跳转网页. 具体代码: 1. 通过随机数生成二维码图片,并执行轮询操作命令的主

  • Android基于google Zxing实现各类二维码扫描效果

    随着微信的到来,二维码越来越火爆,随处能看到二维码,比如商城里面,肯德基,餐厅等等,对于二维码扫描我们使用的是google的开源框架Zxing,我们可以去http://code.google.com/p/zxing/下载源码和Jar包,之前我项目中的二维码扫描功能只实现了扫描功能,其UI真的是其丑无比,一个好的应用软件,其UI界面也要被大众所接纳,不然人家就不会用你的软件啦,所以说应用软件功能和界面一样都很重要,例如微信,相信微信UI被很多应用软件所模仿,我也仿照微信扫描二维码效果进行模仿,虽然

  • Android上使用ZXing识别条形码与二维码的方法

    目前有越来越多的手机具备自动对焦的拍摄功能,这也意味着这些手机可以具备条码扫描的功能.手机具备条码扫描的功能,可以优化购物流程,快速存储电子名片(二维码)等. 本文所述实例就使用了ZXing 1.6实现条码/二维码识别.ZXing是个很经典的条码/二维码识别的开源类库,早在很久以前,就有开发者在J2ME上使用ZXing了,只不过需要支持JSR-234规范(自动对焦)的手机才能发挥其威力,而目前已经有不少Android手机具备自动对焦的功能. 本文代码运行的结果如下,使用91手机助手截图时,无法截

  • 基于barcodescanner实现Android二维码扫描功能

    二维码扫描现在成为一种非常常见的APP基础功能,附录1是我曾经用过的二维码/条形码扫描开源项目,但是附录1的项目集成和二次定制比较繁琐和麻烦,因此可以发现不少人基于ZXing做了二次的开发,并贡献出这些项目,发到github上,其中barcodescanner就是这样的项目,barcodescanner的github项目地址:https://github.com/dm77/barcodescanner ,barcodescanner简化了ZXing的集成和二次定制难度,方便快速集成和开发,并且扫

  • Android实现基于ZXing快速集成二维码扫描功能

    二维码扫描现在是一直比较多的应用场景,android的开源项目ZXing提供了完整.成熟的解决方案,如果仅仅是出于快速开发的目的,可以根据自己的项目需要,把ZXing官方提供的项目稍加裁剪,就可以快速的集成到自己的项目中.下面详细演示和介绍如何实现基于ZXing官方提供的源码,快速集成二维码扫描功能到自己项目中的解决方案. (第1步):到ZXing官方主页下载最新的项目代码包,ZXing在github的官方主页:https://github.com/zxing,下载后解压.解压后根目录下有若干项

  • Android Zxing二维码扫描图片拉伸问题的解决方法

    还是这个接手项目,二维码扫描集成的是zxing,扫描界面的图像有明显的拉伸变形. 这种问题,根据以往的经验,一般是x,y轴错位引起的,处理好x,y轴的问题,一般可以解决问题. 由于这个问题,之前有很多人遇到,并分享在网上了,所以,我这里也就不需要重复造轮子了. 这里看了一篇博客:Android Zxing二维码扫描图片拉伸,用了上面的办法, 成功的解决图片拉伸问题. 解决方法如下: 修改CameraConfigurationManager.Java里面的initFromCameraParamet

  • Android Zxing二维码扫描图片拉伸的解决方法

    二维码扫描,Android Zxing图片拉伸解决. Zxing是google提供的二维码扫描工程 默认是横屏的  转换成竖屏后图片出现拉伸 这里提供解决办法: Zxing 修改 CameraConfigurationManager.Java文件的void initFromCameraParameters(Camera camera)方法 在Log.d(TAG, "Screen resolution: " + screenResolution);这句之后增加 Point screenR

  • Android如何实现扫描和生成二维码

    目标效果:     该例子可以扫描二维码和条形码,扫描后会将信息显示到下方的TextView中,在EditText中输入想要生成的文本,点击生成二维码,会在下方显示二维码图片. 1.二维码的扫描与生成需要一个框架,网上的框架导入后改成is Library会提示错误,把switch改成if语句错误就没有了. 2.导入框架并新建项目,把框架添加到项目中去. 3.activity_main.xml页面设置控件. activity_main.xml页面: <LinearLayout xmlns:andr

随机推荐