1. 程式人生 > >Android 使用Zxing實現二維碼的生成,掃描

Android 使用Zxing實現二維碼的生成,掃描

在專案中要使用到二維碼的相關內容,百度(原諒我還在用)之後得知一半都是使用Google的開源庫 Zxing,但是網上多半的使用教程都是比較早的,這裡給出我總結的一些基礎程式碼和使用規則:

首先要一定要先去官網看看:

1. 如何匯入

如果是使用android studio, 那麼在gradle檔案裡新增以下:

compile 'com.google.zxing:core:3.2.1'

或者

compile group: 'com.google.zxing', name: 'core', version: '3.2.1'

匯入 ZXing Android Embedded

repositories {
    jcenter()
}
dependencies { compile 'com.journeyapps:zxing-android-embedded:3.3.0' compile 'com.android.support:appcompat-v7:23.1.0' // Version 23+ is required || 要求版本23以上 } android { buildToolsVersion '23.0.2' // Older versions may give compile errors || 更早的版本可能會報錯 }

如何生成一個二維碼?

以下這個方法,傳入一個字串,生成一個二維碼的Bitmap,可以用於顯示

Bitmap encodeAsBitmap(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; } // 如果不使用 ZXing Android Embedded 的話,要寫的程式碼 // int w = result.getWidth(); // int h = result.getHeight(); // int[] pixels = new int[w * h]; // for (int y = 0; y < h; y++) { // int offset = y * w; // for (int x = 0; x < w; x++) { // pixels[offset + x] = result.get(x, y) ? BLACK : WHITE; // } // } // bitmap = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888); // bitmap.setPixels(pixels,0,100,0,0,w,h); return bitmap; }

是不是使用ZXing Android Embedded的好處就很明顯了?之後的掃描和生成功能,就不分開討論了

如何掃描?

使用掃描的時候,是用到系統的服務的,是從當前的 MainActivity 跳轉到 CustomScanActivity

掃描的樣式是完全 可以 自定義的

以下是相關程式碼:

MainActivity中:

// 你也可以使用簡單的掃描功能,但是一般掃描的樣式和行為都是可以自定義的,這裡就寫關於自定義的程式碼了
// 你可以把這個方法作為一個點選事件
public void customScan(){
        new IntentIntegrator(this)
        .setOrientationLocked(false)
        .setCaptureActivity(CustomScanActivity.class) // 設定自定義的activity是CustomActivity
        .initiateScan(); // 初始化掃描
    }
@Override
// 通過 onActivityResult的方法獲取 掃描回來的 值
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode,resultCode,data);
        if(intentResult != null) {
            if(intentResult.getContents() == null) {
                Toast.makeText(this,"內容為空",Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(this,"掃描成功",Toast.LENGTH_LONG).show();
                // ScanResult 為 獲取到的字串
                String ScanResult = intentResult.getContents();
            }
        } else {
            super.onActivityResult(requestCode,resultCode,data);
        }
    }

CustomScanActivity 添加了 開啟閃光燈button,和兩個做樣子的button

對應的 layout 檔案

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.zhaojun.zxingtest.CustomScanActivity">


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="SwitchLight"
        android:id="@+id/btn_switch"
        android:layout_alignParentBottom="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hint_1"
        android:id="@+id/btn_hint1"
        android:layout_alignTop="@+id/btn_switch"
        android:layout_centerHorizontal="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hint_2"
        android:id="@+id/btn_hint2"
        android:layout_alignTop="@+id/btn_hint1"
        android:layout_alignParentEnd="true" />

<!-- 我這裡只是在大局下修改了一些樣式,不過其實 掃描框中的 各種鐳射條,邊框都可以改變,有興趣的同學可以自己去搜一下 -->
<!-- 這個控制元件就是掃描的視窗了 -->
    <com.journeyapps.barcodescanner.DecoratedBarcodeView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/dbv_custom"
        app:zxing_framing_rect_width="200dp"
        app:zxing_framing_rect_height="50dp"

        app:zxing_preview_scaling_strategy="fitXY"
        app:zxing_use_texture_view="true"
        android:layout_above="@+id/btn_switch"
        android:layout_alignEnd="@+id/btn_hint2">
    </com.journeyapps.barcodescanner.DecoratedBarcodeView>

</RelativeLayout>

java檔案 其中有使用 ButterKnife

public class CustomScanActivity extends AppCompatActivity implements DecoratedBarcodeView.TorchListener{ // 實現相關介面
    // 新增一個按鈕用來控制閃光燈,同時新增兩個按鈕表示其他功能,先用Toast表示

    @BindView(R.id.btn_switch) Button swichLight;
    @BindView(R.id.btn_hint1) Button hint1Show;
    @BindView(R.id.btn_hint2) Button hint2Show;
    @BindView(R.id.dbv_custom) DecoratedBarcodeView mDBV;

    private CaptureManager captureManager;
    private boolean isLightOn = false;

    @Override
    protected void onPause() {
        super.onPause();
        captureManager.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        captureManager.onResume();
    }

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

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
        captureManager.onSaveInstanceState(outState);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        return mDBV.onKeyDown(keyCode, event) || super.onKeyDown(keyCode, event);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_custom_scan);
        ButterKnife.bind(this);

        mDBV.setTorchListener(this);

        // 如果沒有閃光燈功能,就去掉相關按鈕
        if(!hasFlash()) {
            swichLight.setVisibility(View.GONE);
        }

        //重要程式碼,初始化捕獲
        captureManager = new CaptureManager(this,mDBV);
        captureManager.initializeFromIntent(getIntent(),savedInstanceState);
        captureManager.decode();
    }

    // torch 手電筒
    @Override
    public void onTorchOn() {
        Toast.makeText(this,"torch on",Toast.LENGTH_LONG).show();
        isLightOn = true;
    }

    @Override
    public void onTorchOff() {
        Toast.makeText(this,"torch off",Toast.LENGTH_LONG).show();
        isLightOn = false;
    }

    // 判斷是否有閃光燈功能
    private boolean hasFlash() {
        return getApplicationContext().getPackageManager()
                .hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
    }

    // 點選切換閃光燈
    @OnClick(R.id.btn_switch)
    public void swichLight(){
        if(isLightOn){
            mDBV.setTorchOff();
        }else{
            mDBV.setTorchOn();
        }
    }
}

核心程式碼其實很少,比較容易掌握

相關推薦

android實現生成掃描

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

Android 基於google Zxing實現、條形碼掃描仿微信掃描效果(現在正做個掃描App、收藏)

瞭解二維碼這個東西還是從微信中,當時微信推出二維碼掃描功能,自己感覺挺新穎的,從一張圖片中掃一下竟然能直接加好友,不可思議啊,那時候還不瞭解二維碼,呵呵,然後做專案的時候,老闆說要加上二維碼掃描功能,然後自己的屁顛屁顛的去百度,google啥的,發現很多朋友都

Android使用zxing-android-embedded(由zxing開發)實現生成掃描

前言: 目前二維碼(條形碼)的使用非常廣泛,所以啊,就想去實現以下嘛,最簡單的方法就是選擇開源庫了。 在網上一查開源庫還是很多的,介紹使用最多的就是zxing,所以這裡也就是用zxing了。但是由於zxing開源庫太大了,有很多不是Android要用的,所以

Android開發實現生成

要根據內容來實現二維碼的生成,這裡需要用到一個第三方的jar包(Google的開源jar包zxing.jar) 下面直接貼上我寫好的最最最簡單的demo public Bitmap setCode(String contents,int width,int height){

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

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

高仿仿微信介面掃描效果 之 Android 基於google Zxing實現、條形碼掃描

    絕大多數android開發者都是使用google Zxing來實現二維碼、條形碼掃描,但官方和網上很多demo的掃描介面讓人不忍直視,今天我也做了一個,介面和執行效都是高仿微信最新版的掃描效果,執行效果圖如下: 主要是修改了ViewfindView類,我就不多解

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

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

Android 使用Zxing實現生成掃描

在專案中要使用到二維碼的相關內容,百度(原諒我還在用)之後得知一半都是使用Google的開源庫 Zxing,但是網上多半的使用教程都是比較早的,這裡給出我總結的一些基礎程式碼和使用規則: 首先要一定要先去官網看看: 1. 如何匯入 如果是使用andro

Android 基於google Zxing實現 條形碼掃描仿微信掃描效果

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

AndroidZxing/生成功能

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

Xamarin.Android-用ZXing實現掃描以及連續掃描

一、前言 本文的內容有兩個基礎:ZXing.Net和ZXing.Net.Mobile ZXing.Net:ZXing的C#實現,主要封裝了各種二維碼的編碼、解碼等跨平臺的演算法 ZXing.Net.Mobile:對ZXing.Net在xamarin的應用進行了封裝,主要實現了攝像頭掃描、掃描view、掃

androidZxing實現功能的快速整合以及掃描介面的定製

Zxing二維碼庫是相當豐富。但是我們往往只需要裡面的掃碼識別以及生成二維碼的功能就可以了,所以這次用到了已經抽離出核銷程式碼的框架包 compile ‘com.journeyapps:zxing-android-embedded:3.3.0’,來快速整合開發

使用zxing實現並解析

使用zxing生成二維碼,會比較簡單。很適合初學者學習。 package com.code; import java.io.File; import java.nio.file.Path; import java.util.HashMap; import com

vue中實現生成

安裝 :  npm install --save qrcodejs2 js部分: <script> import QRCode from 'qrcodejs2' export default { methods: {

Android ZXing整合---簡易

1.匯入依賴 implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.2.5' 2.寫佈局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:

生成包含文字網址圖片等

二維碼所引入的jar包 pom檔案配置         <dependency>           

java實現生成及呼叫印表機列印

在開發二維碼列印的過程中走過幾次彎路,所以在這裡特意將其記錄下來留作備忘。一開始參考其他博主寫的文章,有介紹通過編寫JAVA後臺程式碼來獲取本地預設印表機的驅動實現列印。BUT!這樣就導致在本地開發測試時看似一切正常,一旦專案部署到linux環境下,就會完全失效了(JAVA後臺程式碼去獲取linux本地的印表

java實現生成及調用打印機打印

alt arc 自己 linu graph 首頁 tor ram gopath 在開發二維碼打印的過程中走過幾次彎路,所以在這裏特意將其記錄下來留作備忘。一開始參考其他博主寫的文章,有介紹通過編寫JAVA後臺代碼來獲取本地默認打印機的驅動實現打印。BUT!這樣就導致在本地開

qt實現生成和解析

sudo apt-get install qrencode qrencode (-s int) - o **.png QString(二維碼內容,連結) 解析:下載QZXing原始碼 http://www.csdn.net/tag/qzxing  解壓zip:sudo un

Android ZXing)庫的全面使用解析

Android ZXing(二維碼)庫解析 本文原創,轉載請註明出處。 歡迎關注我的 簡書 ,關注我的專題 Android Class 我會長期堅持為大家收錄簡書上高質量的 Android 相關博文。 寫在前面: 春天到了,天氣轉暖,風吹走了