Android - BGAQRCode 扫描二维码生成二维码

本文介绍了在Android中实现二维码扫描的步骤,包括引入依赖库、编写扫码类及布局设计。在实际操作中遇到了版本号匹配、权限请求、扫码顺序等问题,并给出了相应的解决方法。同时,代码示例展示了如何启动和停止扫码功能,以及处理扫描结果。
摘要由CSDN通过智能技术生成

 具体看git的Demo代码,下面是自己写的扫描二维码的代码:

1.gargle引入:

   //二维码扫描
    compile 'com.google.zxing:core:3.2.1'
    compile 'cn.bingoogolapple:bga-qrcodecore:1.1.3@aar'
    compile 'cn.bingoogolapple:bga-zxing:1.1.3@aar'


2.扫码类:

package briefer.pet.ui.activity;

import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Vibrator;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import briefer.pet.R;
import cn.bingoogolapple.qrcode.core.QRCodeView;
import cn.bingoogolapple.qrcode.zxing.ZXingView;

/**
 * 扫码
 * Created by zst on 2017/6/6.
 */

public class ScanCodeActivity extends Activity implements QRCodeView.Delegate {
    private static final int REQUEST_CODE_CAMERA = 999;
    private static final String TAG = ScanCodeActivity.class.getSimpleName();

    private QRCodeView mQRCodeView;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scan_code);

        mQRCodeView = (ZXingView) findViewById(R.id.zxingview);
        mQRCodeView.setDelegate(this);

        Log.e(TAG, "扫码:01");
    }

    @Override
    protected void onStart() {
        super.onStart();
        mQRCodeView.startCamera();
//        mQRCodeView.startCamera(Camera.CameraInfo.CAMERA_FACING_FRONT);
        mQRCodeView.startSpot();

        Log.e(TAG, "扫码:02");
    }

    @Override
    protected void onStop() {
        mQRCodeView.stopCamera();
        super.onStop();

        Log.e(TAG, "扫码:03");
    }

    @Override
    protected void onDestroy() {
        mQRCodeView.onDestroy();
        super.onDestroy();
        Log.e(TAG, "扫码:04");
    }

    //震动器
    private void vibrate() {
        Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
        vibrator.vibrate(100);

        Log.e(TAG, "扫码:05");
    }

    @Override
    public void onScanQRCodeSuccess(String result) {
        Log.i(TAG, "result:" + result);
        //Toast.makeText(this, result, Toast.LENGTH_SHORT).show();
        vibrate();//震动
        mQRCodeView.stopSpot();

        if (!TextUtils.isEmpty(result)) {
            mQRCodeView.stopCamera();
            mQRCodeView.onDestroy();

            Intent intent = new Intent(ScanCodeActivity.this, ServiceManagerDianZhuNewActivity.class);
            intent.putExtra("url", result);
            //intent.setData(Uri.parse(result));
            startActivity(intent);
            finish();
        } else {
            Toast.makeText(this, "链接无效,请重新扫描", Toast.LENGTH_SHORT).show();
            mQRCodeView.startSpot();
        }
        Log.e(TAG, "扫码:06");
    }

    @Override
    public void onScanQRCodeOpenCameraError() {
        Log.e(TAG, "无相机权限,打开相机出错");

        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.CAMERA}, REQUEST_CODE_CAMERA);
        Log.e(TAG, "扫码:07");
    }

    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.start_spot:
                mQRCodeView.startSpot();
                break;
            case R.id.stop_spot:
                mQRCodeView.stopSpot();
                break;
            case R.id.open_flashlight:
                mQRCodeView.openFlashlight();
                break;
            case R.id.close_flashlight:
                mQRCodeView.closeFlashlight();
                break;
            case R.id.rl_back:
                //onDestroy();
                mQRCodeView.stopCamera();
                mQRCodeView.onDestroy();
                finish();
                break;
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == REQUEST_CODE_CAMERA) {
            mQRCodeView.startCamera();
            mQRCodeView.startSpot();
        }
    }
}

3.布局

activity_scan_code.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout style="@style/MatchMatch"
                xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:app="http://schemas.android.com/apk/res-auto">

    <cn.bingoogolapple.qrcode.zxing.ZXingView
        android:id="@+id/zxingview"
        style="@style/MatchMatch"
        app:qrcv_animTime="2000"
        app:qrcv_barCodeTipText="将条码放入框内,即可自动扫描"
        app:qrcv_borderColor="@android:color/white"
        app:qrcv_borderSize="1dp"
        app:qrcv_cornerColor="#f57257"
        app:qrcv_cornerLength="20dp"
        app:qrcv_cornerSize="3dp"
        app:qrcv_isBarcode="false"
        app:qrcv_isOnlyDecodeScanBoxArea="true"
        app:qrcv_isScanLineReverse="true"
        app:qrcv_isShowDefaultGridScanLineDrawable="true"
        app:qrcv_isShowDefaultScanLineDrawable="false"
        app:qrcv_isShowTipBackground="true"
        app:qrcv_isShowTipTextAsSingleLine="false"
        app:qrcv_isTipTextBelowRect="false"
        app:qrcv_maskColor="#33FFFFFF"
        app:qrcv_qrCodeTipText="将二维码放入框内,即可自动扫描"
        app:qrcv_rectWidth="200dp"
        app:qrcv_scanLineColor="#f57257"
        app:qrcv_scanLineMargin="0dp"
        app:qrcv_scanLineSize="1dp"
        app:qrcv_tipTextColor="@android:color/white"
        app:qrcv_tipTextSize="12sp"
        app:qrcv_toolbarHeight="0dp"
        app:qrcv_topOffset="180dp"/>

    <LinearLayout
        style="@style/MatchWrap.Vertical"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="50dp">

        <LinearLayout style="@style/MatchWrap.Horizontal">

            <TextView
                android:id="@+id/start_spot"
                style="@style/AutoWrapTv"
                android:text="开始识别"
                android:visibility="gone"/>

            <TextView
                android:id="@+id/stop_spot"
                style="@style/AutoWrapTv"
                android:text="暂停识别"
                android:visibility="gone"/>

            <TextView
                android:id="@+id/open_flashlight"
                style="@style/AutoWrapTv"
                android:text="开灯"/>

            <TextView
                android:id="@+id/close_flashlight"
                style="@style/AutoWrapTv"
                android:text="关灯"/>

        </LinearLayout>

    </LinearLayout>

    <RelativeLayout
        android:id="@+id/rl_back"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginTop="30dp"
        android:onClick="onClick"
        android:layout_marginLeft="10dp">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:src="@drawable/ic_back"/>
    </RelativeLayout>
</RelativeLayout>

4.Style.xml

<!-- 扫描样式 -->
    <style name="MatchMatch">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">match_parent</item>
    </style>

    <style name="WrapMatch">
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">match_parent</item>
    </style>

    <style name="MatchWrap">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
    </style>

    <style name="WrapMatch.Vertical">
        <item name="android:orientation">vertical</item>
    </style>

    <style name="MatchWrap.Vertical">
        <item name="android:orientation">vertical</item>
    </style>

    <style name="MatchWrap.Horizontal">
        <item name="android:orientation">horizontal</item>
    </style>

    <style name="AutoWrap">
        <item name="android:layout_width">0dp</item>
        <item name="android:layout_weight">1</item>
        <item name="android:layout_height">wrap_content</item>
    </style>

    <style name="AutoWrapTv" parent="AutoWrap">
        <item name="android:textSize">12sp</item>
        <item name="android:textColor">@android:color/white</item>
        <item name="android:gravity">center</item>
        <item name="android:background">@drawable/selector_btn_orange</item>
        <item name="android:layout_margin">45dp</item>
        <item name="android:onClick">onClick</item>
        <item name="android:paddingLeft">4dp</item>
        <item name="android:paddingRight">4dp</item>
        <item name="android:paddingTop">8dp</item>
        <item name="android:paddingBottom">8dp</item>
    </style>


5.selector_btn_orange.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="#CCf57257" />
            <corners android:radius="5dp" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <solid android:color="#f57257" />
            <corners android:radius="5dp" />
        </shape>
    </item>

</selector>

6.权限

<!-- 扫码 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


遇到的问题:

1.使用gardle导入jar包的时候,

compile 'cn.bingoogolapple:bga-qrcodecore:1.1.3@aar'

1.1.3的版本号一定要输入对,否则导入不成功。

2.Demo中没有考虑那么全对于摄像头打开和关闭,这里需要自己打Log来测试一下扫码的顺序,这样好开发。

3.Demo中是按钮启动扫码的,不会打开Activity就会扫码的,所以自己打开Activity的时候要自己启动一下扫码:

mQRCodeView.startSpot();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春哥111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值