1. 程式人生 > >BGAQRCode 掃描二維碼生成二維碼

BGAQRCode 掃描二維碼生成二維碼

說明:

       這裡只是用到了ZXingDemo的程式碼二維碼掃描功能

效果圖:

       

自己的程式碼:

        具體看git的Demo程式碼,下面是自己寫的掃描二維碼的程式碼:

1.gargle引入:

   //二維碼掃描
    compile 'com.google.zxing:core:3.2.1'
    compile 'cn.bingoogolapple:bga-qrcodecore:[email protected]'
    compile 'cn.bingoogolapple:bga-zxing:[email protected]
'

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:[email protected]'
1.1.3的版本號一定要輸入對,否則匯入不成功。

2.Demo中沒有考慮那麼全對於攝像頭開啟和關閉,這裡需要自己打Log來測試一下掃碼的順序,這樣好開發。

3.Demo中是按鈕啟動掃碼的,不會開啟Activity就會掃碼的,所以自己開啟Activity的時候要自己啟動一下掃碼:

mQRCodeView.startSpot();

相關推薦

BGAQRCode 掃描生成

說明:        這裡只是用到了ZXingDemo的程式碼二維碼掃描功能 效果圖:         自己的程式碼:         具體看git的Demo程式碼,下面是自己寫的掃描二維碼的程式碼: 1.gargle引入: //二維碼掃描 comp

掃描 生成

mainactivity.xml佈局 <?xml version="1.0" encoding="utf-8"?> <Button android:id="@+id/btnSan" android:layout_width="

掃描 生成

mainactivity.xml佈局 <?xml version="1.0" encoding="utf-8"?> <Button android:id="@+id/btnSan" android:layout_width="match_paren

HTML5 實現掃描識別 生成

掃描識別二維碼思路        1. 操作攝像頭,獲取圖片。HTML5 WEBRTC的navigator.getUserMedia方法去實時獲取攝像頭資源。         2. 利用canvas使用

Android用Zxing掃/生成功能

新年已過,一切恢復真正常,新的一年給自己幾句指引: 光努力還不行,方向很重要。 總是想著最壞的結果,就會讓人失去改變的勇氣。 你當然有權利選擇自己的人生--但只有在你真正強大後,逆行的阻力才會降到最小。 never say never. 下面開始記錄二維碼使用過程

掃描,生成

掃描,生成二維碼 <?xml version="1.0" encoding="utf-8"?> <Button android:id="@+id/button" android:layout_width="match_parent"

掃描生成

前言 之前自己一直想要去實現一個二維碼的掃描和生成,但是一直拖到現在,今天趁著夜色落幕,氣氛還算可以(各種聲音的夾雜中),完成了這個掃描和生成二維碼的工具,在這裡總結一下。  首先普及一下什麼是二維碼和二維碼開源庫 QR Code QRCode簡介:  QRCode全

簡單的掃描吐司+生成

1.匯入依賴(build.gradle) implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.4' 2.MainActivity頁面 public class MainActivity extends AppCompat

Android Zxing實現掃描條形碼功能仿微信整合閃光燈生成

最近在做android專案需要用到二維碼條形碼掃描功能,我用的是Eclipse網上原始碼大多是GitHup上的Android studio版本的所以我改了一版整合到專案中去。 效果圖: 左邊版本的掃碼框是自定義的。右邊版本的掃碼框和掃描線是圖片因為太醜所以最終換成左邊

生成掃描

導依賴 implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.4' 許可權 <uses-permission android:name="android.permission.CAMERA" /> <uses-pe

掃描+生成

1.佈局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://

andorid zxing的整合和掃描以及生成

二維碼掃描的功能,相信大家以及很熟悉了,但是如何整合呢?網上一搜,於是我們找的了這個開源庫:https://github.com/zxing/zxing 比較權威的一個開源庫,相信很多二維碼掃描核心程式

掃描生成

1.佈局 <?xml version="1.0" encoding="utf-8"?> <cn.bingoogolapple.qrcode.zxing.ZXingView android:id="@+id/zxing" and

如何生成並統計掃描次數,展示頁面

引入了 phpqrcode 外掛來生成自定義二維碼 //建立空二維碼 唯一標識code public function mkCode() { // 引入外掛 include '/static/phpqrcode/phpqrcode.php'

Android 生成掃描,近距離識別優化,從相簿選擇識別

做了一個二維碼掃描圖片,主要是掃描不出來,看到一篇部落格,其中的第二種方法可以掃描到,在此做筆記,以備後用,前面的進入相簿,返回,到獲取圖片路徑方法都一樣; (1):二維碼生成的方法順便貼上: private Bitmap createQRImage(String url, final

IOS幾種常見的實現掃描生成的方式(一、使用ZBar SDK)

        最近專案中使用到掃描二維碼的功能,要求還蠻多的,包括介面的定製,掃描靈敏度,使用的穩定性等等。於是,研究總結了一下IOS中幾種掃描二維碼的實現方式。         基本上我們的實現方法有三大途徑:ZBar、ZXing、AVFoundation。在 iOS7

IOS中生成掃描

轉載自:  http://www.jianshu.com/p/b8bf300e9a56 從IOS7開始集成了二維碼的生成和讀取功能生成二維碼 1 匯入CoreImage框架#import <CoreImage/CoreImage.h> 2 通過濾鏡CIFi

Android開發——Android中的生成掃描

0. 前言今天這篇文章主要描述二維碼的生成與掃描,使用目前流行的Zxing,為什麼要講二維碼,因為二維碼太普遍了,隨便一個Android APP都會有二維碼掃描。本篇旨在幫助有需求的同學快速完成二維碼生成和掃描的功能。本篇轉載自:http://blog.csdn.net/ha

Cordova各個外掛使用介紹系列()—$cordovaBarcodeScanner掃描生成

這是一個用來掃描二維碼的cordova外掛,在做專案的時候想實現類似於微信的掃一掃功能,就想到了cordova的$cordovaBarcodeScanner外掛,用很少量的程式碼就可以實現了,下面來看一下具體的實現步驟: 一、掃描二維碼: 1、首先需要有一個簡單

在android上實現生成掃描

先在androidstudio上匯入libzing的Module,然後再app上把那個libzing新增上去,這樣我們的app就關聯了那個libzing庫了 然後我們就只在app這個工程下寫程式碼就行了。activity_main.xml佈局如下